想象一下,我有一张这样的表:
DatasourceID | Value | TimeStamp |
123 | 2.5 | 09:23:35 |
54 | 2.0 | 08:03:41 |
123 | 1.9 | 09:25:36 |
54 | 2.0 | 08:03:41 |
123 | 1.9 | 09:21:35 |
54 | 2.0 | 08:03:41 |
我需要找出每个数据源是否有两个低于2.0的结果值,使用时间戳作为排序参数。
由此产生的价值我的意思是随之而来的。因此,如果我们制作一个时间有序的值列表,如2.2,1.9,1.8,那么查询将检测该事件。但是,如果列表如1.9,2.2,1.8那么查询将不会检测到该事件。
可以在不使用存储过程的情况下完成吗?
答案 0 :(得分:0)
不确定两个后续值的含义,但如果您要查找低于2.0的2个值,则可以使用group by
having
进行{/ 1}}
select DatasourceID
from tbl1
where Value < 2.0
group by DatasourceID
having count(distinct value) = 2
答案 1 :(得分:0)
select DatasourceID, Timestamp
from (
select DatasourceID,
Timestamp,
Value,
lag(Value, 1, 5.0) over (partition by DatasourceID order by TimeStamp) as Previous
from the_table
) s1
where Value < 2.0 and Previous < 2.0
想法是按DatasourceID
拆分,按TimeStamp
对每个分区进行排序,并将每行的Value
与前一行(在同一分区中)进行比较
自SQL Server 2012以来LAG功能可用