簡體   English   中英

如何比較同一表上最后插入的兩個指定行的列值?

[英]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;

注意:此不采取NULLreference考慮在內,但,很容易結合到邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM