sql-server - 排除意义相同但值不同的行
问题描述
我有以下数据:
Time ID Context Value
----------------------- --------------- ---------- -----
2021-02-03 10:07:32.777 359586015047527 TwigStatus 4
2021-02-03 10:07:32.777 359586015047527 SafeProtectDeviceConnected False
2021-02-03 10:07:32.580 359586015047527 ConnectionLost True
所有行都具有相同的语义。SafeProtectDeviceConnected
由于第二行(上下文= ),我需要一个查询来排除它们
因此,使用上面的数据集,结果集将是:
Time ID Context Value
----------------------- --------------- ---------- -----
如果数据集是:
Time ID Context Value
----------------------- --------------- ---------- -----
2021-02-03 10:07:32.777 359586015047527 TwigStatus 4
2021-02-03 10:07:32.580 359586015047527 ConnectionLost True
我想要只有一排,不管是哪一排。
最后,如果数据集是:
Time ID Context Value
----------------------- --------------- ---------- -----
2021-02-03 10:07:32.580 359586015047527 ConnectionLost True
我想退回这一行。
我试图在我的 SELECT 语句中向我的数据集添加新列:
row_number() over (partition by ID order by Time desc) AS row_num
和:
CASE WHEN Context = 'SafeProtectDeviceConnected' THEN 1 WHEN Context = 'TwigStatus' THEN 2 WHEN Context = 'ConnectionLost' THEN 3 END AS row_num2
但是我无法通过过滤子句来获得所需的结果。
编辑:业务逻辑是这样的:
- 设备正在告诉服务器它正在停止 (TwigStatus/SafeProtectDeviceConnected)
- 设备还会向服务器发送 ping 以告知它仍然在线。
- 如果设备在预定义的超时时间内没有发送 ping,则服务器认为服务器已丢失连接 (ConnectionLost)
这是最好的情况。
因为一切都可能出错并且为了保持与现有应用程序和工具的兼容性,我们可以在数据库中保存三个、两个或一个记录来告知设备处于脱机状态。
解决方案
我想这就是你想要的?
用于NOT EXISTS()
获取ID
不包含SafeProtectDeviceConnected
. 用于ROW_NUMBER()
每个 ID 仅获取一行
SELECT *
FROM
(
SELECT *, rn = row_number() over (partition by T.ID order by T.Time)
FROM yourtable T
WHERE NOT EXISTS
(
SELECT *
FROM yourtable X
WHERE X.ID = T.ID
AND X.Context = 'SafeProtectDeviceConnected'
)
) D
WHERE D.rn = 1
推荐阅读
- autodesk-forge - 无法加载到许多纹理时 Autodesk forge 挂起
- python - 使用 manylinux + auditwheel pip Wheels 与 Conda 打包
- sql - 从 Oracle 表生成插入
- rust - 将借来的值保存在集合中的 Rust 方法是什么?
- apache-kafka - Kafka Streams - 如何更好地控制内部创建的状态存储主题的分区?
- git - GIT - 致命:不能使用 .idea/ 作为排除文件
- jquery - 如果用户名和电子邮件都可用,如何显示按钮
- java - FireFox 无法在 ws://1.1.1.26:81 建立与服务器的连接
- inno-setup - 将包含引号的命令行参数传递给安装程序
- linux - 复制名称中包含偶数的文件 - bash