5

我知道这个问题已经有一些解决方案,但它们似乎对我不起作用。

我想在我的数据库中选择每个用户每天的最后一条记录。我有一个数据库,该数据库按国家/地区存储用户的位置,并且可以追溯到第二个。

我试图运行的选择查询是:

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

但是,这实际上是向我显示每天的最后一个日期,而不是正确对应的idand country。它实际上得到了第一个idcountry最后一个date

我究竟做错了什么?

非常感谢帮助!

谢谢,

杰克

4

3 回答 3

11

尝试此查询以显示每个用户每天的最后一条记录,-

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 条件。

于 2012-05-08T15:01:01.077 回答
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
于 2012-05-08T14:55:29.803 回答
-1

您应该通过将 ORDER BY 更改为 DESC 而不是 ASC 来获得正确的结果

于 2012-05-08T15:32:45.230 回答