[英]Compare two rows in SQL Server
问题:我需要 select 只记录“O”,如果记录为“D”,还要检查“实际时间”,然后不考虑记录 - 'O' output,请参阅我预期的 Z78E6221F6393F1CED6 到 SQLDB639 下面的预期 output
SELECT DISTINCT Record, Actual Time
FROM app.abc
WHERE id = 100
Record Actual Time
-----------------------------------
D 2022-06-13 02:52:00.000
O 2022-06-13 02:52:00.000
O 2022-06-13 05:11:00.000
预期 output:
Record Actual Time
---------------------------------
O 2022-06-13 05:11:00.000
好的,
;WITH [X] AS (
SELECT DISTINCT [Record], [Actual Time] FROM [app].[abc] WHERE [id]=100
)
SELECT
O.[Record],
O.[Actual Time]
FROM
[X] [O]
LEFT JOIN
(
SELECT
[Actual Time]
FROM
[X]
WHERE
[Record] = 'D'
) [D]
ON D.[Actual Time] != O.[Actual Time]
WHERE
O.[Record] = 'O';
您想查找没有匹配D
记录的O
记录。 这几乎就是反连接的定义。 你可以做:
select a.*
from abc a
left join abc b on b.actual_time = a.actual_time and b.record = 'D'
where a.record = 'O' and b.record is null
结果:
record actual_time
------ ---------------------------
O 2022-06-13 05:11:00.0000000
请参阅db<>fiddle的运行示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.