我在資料庫 (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 的資料新
uj5u.com熱心網友回復:
不確定我是否有問題:)
Select * from
thistable as A
join thistable as B on A.P_ID=B.P_ID
where A.l_id<>B.l_ID and A.dummycolumn2<>B.dummycolumn2
uj5u.com熱心網友回復:
您可以通過exists以下方式檢查:
select *
from t as t1
where exists (
select *
from t as t2
where t2.p_id = t1.p_id -- t2 is same group
and t2.l_id < t1.l_id -- t2 is an older row
and t2.dummyColumn2 <> t1.dummyColumn2 -- status (?) is different
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379312.html
標籤:sql sql-server 加入 比较
