仅在与之前在不同日期添加的行进行比较后获取特定行

Get specific rows only after comparing with previously added rows on different date

有一个 table,它有多个字段,包括更新当前记录的日期列。

Col1 Col2 Col3 Date
A X1 Y1 Today
B X2 Y2 Today
C X3 X3 Today
A X1 Y1 Yesterday
B X4 Y4 Yesterday

我正在寻找一个好的 SQL SELECT 语句来仅获取当前日期的更新和新记录,换句话说就是上面的 table 第二和第三个记录将是我的答案。第 3 行是当天新创建的行,第 2 行与昨天相比改变了 Col2 & Col3。它还应该处理边缘情况。

您可以尝试使用 NOT EXISTS 子查询来查找您的逻辑。

SELECT *
FROM T t1
WHERE Date = 'Today'
AND NOT EXISTS (
    SELECT *
    FROM T tt
    WHERE Date = 'Yesterday'
    AND t1.Col1 = tt.Col1
    AND t1.Col2 = tt.Col2
    AND t1.Col3 = tt.Col3
)

sqliffle

mysqlwhere condition 中使用 full joinequivalent

SELECT t1.col1,
       t1.col2,
       t1.col3,
       t1.date
FROM   table  t1
       LEFT JOIN (SELECT *
                  FROM   table 
                  WHERE  date = 'Yesterday') t2
              ON t1.col1 = t2.col1
                 AND t1.col2 = t2.col2
                 AND t1.col3 = t2.col3
WHERE  t1.date = 'Today'
       AND t2.col2 IS NULL
UNION ALL
SELECT t1.col1,
       t1.col2,
       t1.col3,
       t1.date
FROM   table  t1
       RIGHT JOIN (SELECT *
                   FROM   table 
                   WHERE  date = 'Yesterday') t2
               ON t1.col1 = t2.col1
                  AND t1.col2 = t2.col2
                  AND t1.col3 = t2.col3
WHERE  t1.date = 'Today'
       AND t2.col2 IS NULL