我在表格中有5列id, address, lat, lng, timesetamp
,如果两行在lat
和lng
列中具有相似的值,则认为该行是重复的。
MySQL查询
SELECT address, lat, lng FROM table GROUP BY lat, lng
问题:我设法让它只返回此查询的唯一行。但是,结果似乎是最早插入数据库的重复行。如何让MySQL返回最新的重复行?比如返回带有最新timestamp
答案 0 :(得分:3)
对于每个纬度/经度组合,这应该得到具有最新时间戳的行,而不管每种组合有多少行。
SELECT
[what you want to know about the latest row]
FROM
table t1
INNER JOIN
(
SELECT
lat,
long,
max(timestamp) as latest
FROM
table
GROUP BY
lat,
long
) as t2
ON (
t1.lat=t2.lat AND
t1.long=t2.long AND
t1.timestamp=t2.latest
)
如果您只想要具有重复组合的行,则需要调整子查询以计算GROUPed行并使用HAVING过滤它们。
答案 1 :(得分:2)
尝试此查询
SELECT address, lat, lng FROM table where timestamp in (select max(timestamp) from table GROUP BY lat, lng)
编辑:
这是嵌套查询。子查询将返回最大时间戳,它基于lat和lng字段的组,因此它将返回多个结果,因此您需要使用in()函数。外部查询将根据时间戳检索值,假设有不同lat的多个时间戳,你得到的那些查询将给出所有这些记录。
如果有任何混淆问题
答案 2 :(得分:0)
您可能希望分两步完成此操作。使用
获取包含1个以上记录的列表HAVING COUNT(*) > 1
然后从该列表中获取具有最新时间戳的第二个记录列表。