[英]How to compare the column values of two last inserted specified rows on the same table?
我有一個數據集,正在對客戶進行的每個操作進行更新。 例如,我得到了客戶的最后兩個操作
select id,
referance
from (select id,
referance,
row_number()
over (order by time desc) as seqnum
from mytable where id=':id')
al where seqnum <= 2
id
從功能文件獲取的位置。 但是現在我需要比較這兩個操作的參考值。
mytable中:
id | name | referance | time |
-------------------------------------
11 | abc | 4589 | 09:05 |
11 | abc | 1234 | 09:04 |
10 | xyz | 0185 | 09:02 |
15 | qpr | 9564 | 08:54 |
等等...
同樣,我可以得到id = 11的最后兩行; 並且,就所有列而言都不是(空),它返回的是“ true”,這正是我想要的。 但是我也想比較一下他們的參考文獻是否相同。 並且,當我調用查詢時,它必須返回“ true”或“ false”。
提前致謝
PS我實際上只需要一個有用的功能或想法。 我已經嘗試使用內部聯接,但是無法管理它:
select table1.id,
table1.referance,
table2.id,
table2.referance
from (select id,
referance,
row_number()
over (order by time desc) as seqnum
from mytable where id=':id') table1
inner join (select id,
referance,
row_number()
over (order by time desc) as seqnum
from mytable where id=':id') table2
on table1.referance != table2.referance
al where seqnum <= 2 order by seqnum
根據id
匯總您當前的查詢,並檢查兩個參考值是否相同。
select
id,
case when count(distinct reference) = 1
then 'true' else 'false' end as result
from
(
select id, reference,
row_number() over (order by time desc) as seqnum
from table
where id=':id'
) al
where seqnum <= 2
group by id;
如果兩個記錄的reference
的唯一計數為1
則表示它們具有相同的值。 否則,我們可以假設值是不同的。
為什么使用row_nubmer()
? 您可以通過以下方式獲得最后兩行:
select top 2 id, referance
from mytable
where id=':id'
order by time desc;
然后,您可以使用聚合來確定它們是否相同:
select (case when min(reference) <> max(reference) then 'false'
else 'true'
end) as is_same
from (select top 2 id, referance
from mytable
where id=':id'
order by time desc
) t;
注意:此不采取NULL
值reference
考慮在內,但,很容易結合到邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.