排序后如何从 SQL 中获取数据并确保没有重复

Posted

技术标签:

【中文标题】排序后如何从 SQL 中获取数据并确保没有重复【英文标题】:How do I fetch data from SQL after sorting and making sure none are repeated 【发布时间】:2020-08-14 03:06:03 【问题描述】:

所以我有一个数据库,该表的标题类似于“LAT、LNG、NAME、EMAIL、DATE、TIME”

这是通过将 php 地图页面与数据库连接以获取数据来在地图上显示标记。

现在我的问题是:

例如: 我有电子邮件 ID 的数据集:abc@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。 我有电子邮件 ID 的数据集:xyz@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。 我有电子邮件 ID 的数据集:efg@gmail.com 重复了 10 次。每个都有不同的 LAT 和 LONG。

如何只获取最新的数据集?我只想要 3 个最新的标记,而不是 30 个标记。

我可以使用插入的日期和时间对其进行排序,但如何将其设置为只接收一个。

我的 SQL 查询:$sql = "SELECT DISTINCT email, latitude, longitude, name from test ORDER BY date DESC, time DESC";

我尝试了 DISTINCT,也尝试了 DESC LIMIT 1,但都没有得到想要的结果。也没有错误信息。我错过了什么?

请帮我解决这个问题。

问候 阿比萨

【问题讨论】:

【参考方案1】:

您可以使用子查询进行过滤:

select t.*
from test t
where concat(t.date, ' ', t.time) = (
    select max(concat(t1.date, ' ', t1.time))
    from test t1
    where t1.email = t.email
)

请注意,您不应将日期和时间组件存储在两个不同的列中。当您需要实际生成合法的 datetime 值时,这会使事情变得更加复杂 - 效率会因此受到影响。

【讨论】:

非常感谢.. 这真的很有帮助。我对此很陌生..您是否可以解释上述声明。另外..会将日期和时间更改为日期时间。

以上是关于排序后如何从 SQL 中获取数据并确保没有重复的主要内容,如果未能解决你的问题,请参考以下文章

无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]

sql中获取到两条数据,怎么获取最新的

从 SQL 异常中获取重复的键值

SQL - 如何从一个表中获取重复记录并连接到另一张表

从 ASP.NET 中的 SQL Server 获取汇总/排序的数据

如何从数据网格中获取已排序的项目源