我有一个表,每隔几秒就会不断添加数据。有数百个数据填充了90 eqpids。这是一个示例:
Source_Date | eqpId
2016-02-10 10:39:45.397 3
2016-02-10 10:37:45.317 2
2016-02-10 10:37:46.307 6
2016-02-10 10:36:45.257 5
2016-02-10 10:33:42.397 4
2016-02-10 10:32:41.397 3
2016-02-10 10:31:44.397 1
2016-02-10 10:29:49.397 5
如果source_date在最后5分钟内没有更新但是eqpid是唯一的,我正在寻找显示数据的代码。
它应该显示如下,因为这些eqpid在最后5分钟内没有更新。
Source_Date | eqpId
2016-02-10 10:33:42.397 4
2016-02-10 10:31:44.397 1
答案 0 :(得分:1)
您可以按eqpId
对记录进行分组,并为每个max(Source_Date)
计算eqpId
。
然后只选择与该值不同的记录到当前时间大于5分钟。
select
max(Source_Date) as Source_Date,
eqpId
from your_table
group by eqpId
having datediff(mi, max(Source_Date), getdate()) > 5
答案 1 :(得分:0)
您可以使用DATEADD
函数获取当前时间的时间戳(在SQL Server中为GETDATE
)减去5分钟:
SELECT Source_Date, eqpId
FROM (
SELECT Source_Date, eqpId,
ROW_NUMBER() OVER (PARTITION BY eqpId
ORDER BY Source_date DESC) AS rn
FROM mytable
WHERE Source_Date > DATEADD(mi, -5, GETDATE()) ) t
WHERE t.rn = 1
如果内部查询选择了多个记录, ROW_NUMBER
用于选择每eqpId
的最新记录。