代码之家  ›  专栏  ›  技术社区  ›  Siva

mysql检索当前和最后一小时之间的差异

  •  0
  • Siva  · 技术社区  · 12 年前

    对于下表,我想得到每个站点的col-D和col-E的最后一个小时和当前小时之间的差异。 作为其中的一部分,我试图首先获取每个网站的最新(当前)小时条目,但以下查询仅列出endTime为01:00:00的条目,此时我的条目截止到上午9点

    select distinct(mmeName), endDate, endTime, c_ratio, set_time from attach where
     type='INIT' and Date(endDate)=curDate() and 
    Time(endTime) >= DATE_ADD(Time(endTime), INTERVAL -1 HOUR) group by mmeName;
    

    对于眼前的问题,以及找出当前和最后一个小时之间的差异,我们将不胜感激。

    enter image description here

    1 回复  |  直到 12 年前
        1
  •  1
  •   Tom    12 年前

    已编辑

    我想这就是你想要的。这将为您提供endTime比每个mmeName的最新当前时间早一小时的任何记录。“max”子选择获取每个mmeName的最新结束日期时间,并且在该时间之前正好一小时的记录中进行了回接匹配。

    SELECT  mmeName, endDate, endTime, c_ratio, set_time 
    
    FROM    attach a
    
            JOIN 
            (SELECT  mmeName, CONCAT(endDate, ' ' , endTime) max_endDateTime
             FROM    attach 
             WHERE   type = 'INIT' 
             ORDER BY endDate DESC, endTime DESC
            ) AS max ON max.mmeName = a.mmeName
                    AND max.max_endDateTime = DATE_ADD(CONCAT(endDate, ' ' , endTime), INTERVAL 1 HOUR)
    
    WHERE   type = 'INIT'
    ;
    

    原件

    select  mmeName, endDate, endTime, c_ratio, set_time 
    
    from    attach 
    
    where   type='INIT' and Date(endDate)=curDate() and 
            endTime >= DATE_SUB(now(), INTERVAL -1 HOUR) 
    
    group by mmeName;
    

    注意:如果给定的mmeName有多个匹配的记录,则此查询将只获取其中一个。

    已编辑 :您需要从WHERE子句中删除TIME()函数。两者都有日期和时间,如果你没有,如果你在12:00到1:00之间运行它,它不会返回任何结果。