我有一个包含大约一百万个条目的表,如下所示:
TimeStamp TagName Alarm Status
2017-08-02 10:53:10.000 XS-101 Alarm
2017-08-02 18:49:45.000 XS-201 Alarm
2017-08-03 01:08:16.000 XS-101 Normal
2017-08-05 09:16:42.000 XS-301 Alarm
2017-08-12 12:33:39.000 XS-101 Alarm
我需要弄清楚哪个TagName报警时间最长,但我不在乎它是否目前没有报警。我可以使用我的程序代码执行此操作,但我的所有程序的其他SQL查询都返回了我需要的内容。是否可以仅使用SQL执行此操作?
我已经搜索了人们根据其他行的内容返回行的示例,但我没有运气。
答案 0 :(得分:1)
哪个标签处于警报状态,最长的是询问哪个标签具有最早的当前警报代码。
您可以使用条件聚合执行此操作:
select tagname, max(timestamp)
from t
group by tagname
having max(timestamp) = max(case when status = 'Alarm' then timestamp end)
order by max(timestamp) asc;
这假设同一个标签没有两个报警顺序 - 这与您描述的数据一致。