【发布时间】:2022-01-15 01:13:08
【问题描述】:
我在数据库(SQL Server)中有一个表,看起来像这样
+---------------------------------------------+
| id | p_id | dummyColumn2 | l_id |
+---------------------------------------------+
| 1 | 8 | someData1 | 20 |
+----+--------------+--------------+----------+
| 2 | 13 | someData2 | 20 |
+----+--------------+--------------+----------+
| 3 | 8 | someData1 | 21 |
+----+--------------+--------------+----------+
| 4 | 13 | someData2_c | 21 |
+---------------------------------------------+
我想比较具有相同 p_id 但具有不同 l_id 的行是否相同,如果不同,则获取 p_id。 (在这种情况下,查询应该返回 13,因为它与 p_id = 13 的第二条记录不同)
一些附加信息: 想象一下 p_id 代表唯一标识符,而 l_id 代表最新插入的记录,所以我正在比较旧行 (l_id = 20) 和新行 (l_id = 21) 并获取它是否已更改。
另外请注意这个表格是简化的,所以在实际情况下它有更多的列和行
非常感谢任何帮助,并想知道是否可以使用 Joins 解决此问题。
-- 我想出了一个查询,但它似乎不起作用
//Getting latest l_id
declare @a int
set @a = (Select top(1) l_id from thisTable order by l_id desc)
SELECT NEW.p_id
FROM thisTable AS OLD
INNER JOIN thisTable AS NEW
ON OLD.p_id = NEW.p_id
WHERE OLD.l_id = @a-1
AND NEW.l_id = @a
AND OLD.dummyColumn2 <> NEW.dummyColumn2
AND ... (same for other columns)
编辑: 想象有 1000 行,其中 200 行具有 l_id 18 ,然后另外 200 行具有 l_id 19 ,依此类推。我将具有最高 l_id 的行与之前的行进行比较(如 l_id = 21 和 l_id = 20) 较高的 l_id 意味着数据比具有较低 l_id 的数据更新
【问题讨论】:
标签: sql sql-server join compare