【问题标题】:How to select last record from each day with MySQL如何使用 MySQL 从每一天中选择最后一条记录
【发布时间】:2012-05-08 14:51:47
【问题描述】:

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

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

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

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

我做错了什么?

帮助不胜感激!

谢谢,

杰克

【问题讨论】:

  • 对于给定的用户,是否可以有多个具有相同时间戳的记录?
  • 您能否确认您不希望每个用户有很多记录,只需要每个用户的最后一个条目。基本上是“用户 X 最后在哪里”。下面的几个答案似乎是误解。
  • Devart 的解决方案正是我所追求的。我想要任何给定用户每天的最后一个条目。因此,对于 ID 为 10 的用户,我想知道自 4 月 6 日以来每天结束时他们的位置。谢谢。

标签: mysql max


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我认为你不应该按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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我一开始也是这么想的,不幸的是它没有任何区别,同样的问题仍然存在。
      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2011-08-30
      • 2016-09-03
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多