2013-10-25 35 views
0

对于下表,我想获得col-D和col-E在每个站点上最后一小时和当前小时之间的差异。 作为我试图首先获得每个网站的最新(当前)小时条目的一部分,但以下查询仅列出endTime为01:00:00的条目,当我有条目高达9.00AMmysql检索当前和最后一小时之间的差异

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

+0

DISTINCT不是一个函数,在没有任何聚合函数的情况下,使用GROUP BY是不合适的。要获得进一步的帮助,请考虑提供适当的DDL和/或一个小平台以满足所需的结果。 – Strawberry

+0

我试图用这个时间endTime-1Hour(endTime)> = DATE_ADD(时间(endTime),间隔-1小时)。这不正确吗? – Siva

回答

1

EDITED

我认为这是你在找什么。这将为您提供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' 
; 

ORIGINAL

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

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

+0

谢谢汤姆!对不起,我忘了明确说明,因为有来自不同时区的市场,现在() - 1小时可能不符合所有记录。 – Siva

+0

你如何考虑时区?你有这个领域吗? – Tom

+0

这是非常重要的信息,你应该更新你的问题。 – Tom

相关问题