簡體   English   中英

計算相同類型的兩行之間的差異

[英]Calculate difference between two rows of the same type

假設我有下表(請參見下文),並且我想查找同一機器(=相同vmnaam值)的“ memsize”或“ totalstorage”已更改的條目。

ID  VMNaam  Memsize totalstorage dataentrytime
1      x      12         150         blabla
2      x      12         150         blabla
3      x      14         150         blabla
4      Y      12         150         blabla
5      Y      20         150         blabla
6      Y      18         150         blabla 

以下查詢查找那些行

 SELECT    realTable.VMnaam,
            realTable.memsize,
            realTable.totalstorage

    FROM      vmresourcetest realTable
              LEFT OUTER JOIN (
                 SELECT   (ID+1) AS 'virtualId',
                          (ID) AS 'realId',
                          vmnaam AS 'vmnaamVirtual',
                          memsize AS 'virtualMemsize',
                          totalstorage AS 'virtualTotalstorage'
                 FROM     vmresourcetest
                 ORDER BY vmnaam
              ) virtual 
              ON virtual.virtualId = realTable.id and virtual.vmnaamVirtual = realTable.vmnaam
    where IFNULL((realTable.memsize - virtual.virtualMemsize), 0) <> 0 or IFNULL((realTable.totalstorage - virtual.virtualTotalstorage), 0) <> 0

但是,當機器的行被打亂時,我的查詢顯然不再起作用,因為上一個機器條目的ID可能是另一台機器的ID

例如

1 x blablabla
2 y blablalba
3 y blablabll
4 x blablbla

我想以某種方式將ID + 1更改為(從realtable中選擇id,其中id> id),但這是行不通的。 關於如何解決我的問題有什么想法嗎?

這應該可以幫助您:

SELECT curr.VMnaam,
       curr.memsize,
       curr.totalstorage

FROM   vmresourcetest curr LEFT JOIN   
       vmresourcetest nxt ON curr.id < nxt.id 
                    AND curr.vmnaam = curr.vmnaam
                    AND (curr.memsize != nxt.memsize 
                           OR curr.totalstorage != nxt.totalstorage)
AND NOT EXISTS ( -- there is no record between current and next record
         SELECT * 
         FROM vmresourcetest  
         WHERE id > curr.id AND id < nxt.id AND vmnaam = curr.vmnaam)

暫無
暫無

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

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