Предположим, что у меня есть следующая таблица (см. Ниже), и я хочу найти записи, в которых «memsize» или «totalstorage» для одного и того же компьютера (= то же значение vmnaam) изменилось.Вычислить разницу между двумя строками того же типа
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
Однако, когда ряды машины перемешаны, мой запрос, очевидно, больше не работает, так как идентификатор предыдущей записи машины может быть идентификатором другая машина
Например
1 x blablabla
2 y blablalba
3 y blablabll
4 x blablbla
я как-то нужно изменить идентификатор +1 в (выберите id из realtable, где id> id), но это не работает. Любые идеи о том, как исправить мою проблему?
Посмотрите на ответы здесь: http://stackoverflow.com/questions/25790710/sql-for-setting-column-value-same-as- next-rows-column-value/25791083 # 25791083 Вопрос не совсем то же самое, но я думаю, что общий подход должен помочь вам. – Barmar