2012-05-08 531 views
4

我知道这个问题已经有一些解决方案,但他们似乎并没有为我工作。如何从MySQL的每一天中选择最后一条记录

我想在每个用户的数据库中选择每天的最后一条记录。我有一个数据库,按国家存储用户的位置,并将日期记录到第二位。

我试图运行SELECT查询是:

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 

然而,这是什么实际上做的是让我从每一天的最后日期,而不是正确地对应idcountry。它实际上获得第一个idcountry,以及最后的date

我在做什么错?

帮助非常感谢!

感谢,

杰克

+0

能有几个记录给定用户得到正确的结果? – Romain

+0

您是否可以确认您不希望每个用户拥有大量记录,而只需要每个用户的最后一个记录。基本上“用户X最后在哪里”。以下几个答案似乎是误解。 – Cylindric

+0

Devart的解决方案就是我所追求的。我希望每一天的最后一个条目对于任何给定的用户。因此,对于ID为10的用户,我想知道自4月6日以来每天结束时的位置。谢谢。 –

回答

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条件,如果你需要。

+0

感谢Devart,作品的魅力! –

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 
-1

你应该用相同的时间戳改变你的ORDER BY DESC来代替ASC

+0

这就是我最初的想法,不幸的是它没有任何区别,同样的问题依然存在。 –

相关问题