MySQL:如何每小时对数据进行分组并获得最新的小时数

|| 我正在尝试执行一个查询,该查询每
hour
提取数据,但不是按小时分组,而是要缩小范围,仅获取
latest
小时-表示该小时内的最新数据。下面显示的图片是我想要得到的带有红色框的行。如果您会注意到,第一行红色是
10:59:51
,这表示它是唯一在
10:00:00
10:59:59
之内的行。对于
12:00
及以上的其余行,我想得到
12:37:14
,因为它是该小时范围内的最新或最新信息。 我有一个简单的查询,使用
HOUR()
将数据按ѭ0分组,例如:
SELECT userid, username, date_created
FROM user_accounts 
WHERE date_created >= \'2009-10-27 00:00:00\' AND date_created < \'2009-10-27 23:59:59\'
GROUP BY HOUR(date_created)
但是,查询只是按小时
10
12
分组,返回ID
24
25
-但我需要的是id
24
28
。有任何想法吗?     
已邀请:
尝试
SELECT  f.*
FROM    (
        SELECT  MAX(UNIX_TIMESTAMP(date_created)) AS mts
        FROM  user_accounts 
        GROUP BY HOUR(date_created)
        ) s
JOIN    user_accounts  f
ON      UNIX_TIMESTAMP(date_created) = s.mts
WHERE  DATE(date_created) = \'2009-10-27\'
    
也许这行得通吗?
SELECT userid, username, date_created
FROM user_accounts 
WHERE userid IN (
  SELECT MAX(userid)
  FROM user_accounts 
  WHERE date_created >= \'2009-10-27 00:00:00\' AND date_created < \'2009-10-27 23:59:59\'
  GROUP BY HOUR(date_created)
)
    
我不得不假设,如果您跨越多天,也同样希望每天都这样做,否则一个小时的max()可能会给您一个星期前的一个小时(相对于三天前的另一个小时)和当前一天的另一个时间。 ..那就算了,如果您跨越了WHERE子句,特别是将其限制在单日范围内。它不是您想要的特定用户,而是那个小时内最后活动的人……可能是同一个人,每次都可能完全不同。如果您想跨越某个日期范围,我会将特定日期作为我的小组测试的一部分,但是您也可以将其取出来...
select STRAIGHT_JOIN
       ui.userid,
       ui.username,
       ui.date_created
   from 
       ( select
               date( date_created ),
               hour( date_created ),
               max( date_created ) as LastPerHour
            from
               user_accounts
            where
               date( date_created ) = \'2009-10-27\'
            group by
               date( date_created), 
               hour( date_created )) PreQuery
      join user_accounts ui
         on PreQuery.LastPerHour = ui.date_created
同样,如果您想跨越多天,我也将date分组,只需确保您的表在date_created上创建了索引即可,或者至少在索引的第一位。     
您是说现在开始一个小时还是最近一个小时? 如果是最近一小时的工作时间,可能会起作用吗?
SELECT userid, username, date_created
FROM user_accounts 
WHERE HOUR(date_created) = (SELECT HOUR(date_created) FROM user_accounts ORDER BY date_created DESC LIMIT 1);
编辑: 嗯,现在我想我就会得到您想要的...日期范围之间每隔指定小时的最后添加的条目? 如果是这样,那么Codler的查询就是您想要的。     
我用这个解决方案
select date(PROCESS_DATE),hour(PROCESS_DATE),EVENT,COUNT(*) from statistics group by EVENT,date(PROCESS_DATE),time(PROCESS_TIME) order by 1 desc, 2 desc limit 1;
希望这对某人有帮助。     

要回复问题请先登录注册