如果最后一个日期在每个唯一ID的最后5分钟内没有更新,则SQL2008选择行

时间:2016-02-10 14:16:04

标签: sql sql-server sql-server-2008 tsql

我有一个表,每隔几秒就会不断添加数据。有数百个数据填充了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

2 个答案:

答案 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的最新记录。