繁体   English   中英

比较 SQL 服务器中的两行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM