仅在与之前在不同日期添加的行进行比较后获取特定行
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
)
在 mysql
和 where condition
中使用 full join
的 equivalent
。
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
有一个 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
)
在 mysql
和 where condition
中使用 full join
的 equivalent
。
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