这是一个示例数据。
ID | Date
---------
1 | 4/21/2015 11:00:00 AM
1 | 4/21/2015 01:00:00 PM
我们现在说下午2点,只有当Date
和Now
列之间的时差为> = 2小时时,我才需要查询ID号1
Select ID from Table where datediff(hour, Date, getdate()) >= 2 and ID = '1'
现在此查询将返回上午11点的第一条记录,但我想忽略其他记录,只检查最新记录是否已存在2小时或更长时间。如果当前时间是下午2点且我的上次记录是下午1点,我应该如何更改查询以便不会得到任何结果。
答案 0 :(得分:1)
select id, max(date) as date
from Table
where id = 1
group by id
having datediff(hh, max(date), getdate()) >= 2
删除where
子句,您将获得满足条件的所有ID。
答案 1 :(得分:0)
使用MAX
和GROUP BY
获取ID的最新日期,然后检查它是否超过2小时。这样的事情。
SELECT ID,Date
FROM
(Select ID,MAX(Date) Date
from Table
GROUP BY ID
)T
where datediff(hour, Date, getdate()) >= 2 and ID = 1
答案 2 :(得分:0)
始终注意从函数返回的确切信息。 DateDiff函数返回两个时间参数之间的单位边界数。例如,小时边界是分钟,秒和小数秒为零时:hh:00:00.000。所以返回的值可能非常误导:
select DateDiff( hh, '2015-01-01 12:59:59', '2015-01-01 14:00:00' ) as Short,
DateDiff( hh, '2015-01-01 12:00:00', '2015-01-01 14:59:59' ) as Long
两种情况下的答案都是2小时,但两个日期之间的实际差异在第一种情况下是1小时1秒,在第二种情况下是1小时,差不多是3小时。但是间隔触及相同的两个小时边界,一个在13:00正好,一个在14:00正好。
如果您希望获得两小时内完全的值,请使用DateAdd函数:
select ID, Max( date ) as Date
from Table
where ID = 1
group by ID
having Max( date) <= DateAdd( hh, -2, GetDate());
现在,如果日期是一小时和59分钟前,它将不会被看到,但无论小时边界在何处,都会看到一小时一秒和一小时之前。