我知道这个问题已经有了一些解决方案,但它们似乎对我没用。
我想在我的数据库中选择每个用户每天的最后一条记录。我有一个数据库,按国家和日期存储用户的位置,直到第二个。
我正在尝试运行的选择查询是:
SELECT MAX(date), id, country FROM dk_location_records WHERE userid = '10'
AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59')
AND active = '1' GROUP BY DATE(date) ORDER BY date ASC
但实际上,这实际上是向我显示每天的最后日期,而不是正确对应的id
和country
。它实际上是第一个id
和country
,与最后一个date
一起。
我做错了什么?
非常感谢!
谢谢,
杰克
答案 0 :(得分:10)
尝试此查询以显示每个用户每天的最后一条记录 -
SELECT t1.* FROM dk_location_records t1
JOIN (SELECT DATE(date) date_date, userid, MAX(date) max_date
FROM dk_location_records
GROUP BY date_date, userid
) t2
ON t1.date = t2.max_date AND t1.userid = t2.userid;
...如果需要,请添加您的WHERE条件。
答案 1 :(得分:0)
我认为你不应该按DATE(date)
分组。我认为你应该按userid,country
进行分组。像这样:
SELECT
MAX(date), userid, country
FROM
dk_location_records
WHERE
userid = '10'
AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59')
AND active = '1'
GROUP BY userid,country
ORDER BY date ASC
答案 2 :(得分:-1)
您应该通过将ORDER BY更改为DESC而不是ASC来获得正确的结果