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