--==First, create some sample data ==--SELECT ID, DEVICE, VALUEINTO #yourSampleTableFROM (VALUES(9, 456, 70),(8, 456, 60),(7, 123, 70), (6, 123, 60),(5, 456, 50),(4, 456, 10), (3, 123, 50),(2, 123, 20),(1, 123, 10) )a(ID, DEVICE, VALUE); --== Now for a solution ==--SELECT a.ID, a.DEVICE, a.VALUEFROM (SELECT ID, DEVICE, VALUE, ROW_NUMBER() OVER(PARTITION BY DEVICE ORDER BY ID) AS pos FROM #yourSampleTable) aLEFT OUTER JOIN (SELECT ID, DEVICE, VALUE, ROW_NUMBER() OVER(PARTITION BY DEVICE ORDER BY ID) AS pos FROM #yourSampleTable) b ON a.DEVICE = b.DEVICE AND a.pos = b.pos+1WHERE a.VALUE-b.VALUE > 20;
ID DEVICE VALUE----------- ----------- -----------3 123 505 456 50
DECLARE @Table table( id int, device int, value int)INSERT @TableSELECT 9, 456, 70 UNION ALLSELECT 8, 456, 60 UNION ALLSELECT 7, 123, 70 UNION ALLSELECT 6, 123, 60 UNION ALLSELECT 5, 456, 50 UNION ALLSELECT 4, 456, 10 UNION ALLSELECT 3, 123, 50 UNION ALLSELECT 2, 123, 20 UNION ALLSELECT 1, 123, 10 ;WITH CTE AS ( SELECT id, device, value, ROW_NUMBER() OVER(ORDER BY device, id) rownum FROM @Table)SELECT a.idFROM CTE aJOIN CTE b ON a.rownum = b.rownum + 1WHERE a.value - b.value > 20
declare @tbl table (ID int, DEVICE int, VALUE int)insert into @tbl (ID, DEVICE, VALUE) VALUES (9, 456, 70)insert into @tbl (ID, DEVICE, VALUE) VALUES (8, 456, 60)insert into @tbl (ID, DEVICE, VALUE) VALUES (7, 123, 70)insert into @tbl (ID, DEVICE, VALUE) VALUES (6, 123, 60)insert into @tbl (ID, DEVICE, VALUE) VALUES (5, 456, 50)insert into @tbl (ID, DEVICE, VALUE) VALUES (4, 456, 10)insert into @tbl (ID, DEVICE, VALUE) VALUES (3, 123, 50)insert into @tbl (ID, DEVICE, VALUE) VALUES (2, 123, 20)insert into @tbl (ID, DEVICE, VALUE) VALUES (1, 123, 10)select t2.IDfrom @tbl as t1 inner join @tbl as t2 on t1.ID = t2.ID -1where t2.VALUE - t1.VALUE > 20
DECLARE @Table table( id int, device int, value int)INSERT @TableSELECT 9, 456, 70 UNION ALLSELECT 8, 456, 60 UNION ALLSELECT 7, 123, 70 UNION ALLSELECT 6, 123, 60 UNION ALLSELECT 5, 456, 50 UNION ALLSELECT 4, 456, 10 UNION ALLSELECT 3, 123, 50 UNION ALLSELECT 2, 123, 20 UNION ALLSELECT 1, 123, 10 ;WITH CTE AS ( SELECT id, device, value, ROW_NUMBER() OVER(ORDER BY id) rownum FROM @Table)SELECT a.idFROM CTE aJOIN CTE b ON a.rownum = b.rownum + 1WHERE a.value - b.value > 20
DECLARE @Table TABLE (id INT, device INT, value INT);INSERT @TableSELECT 5, 456, 50UNION ALL SELECT 4, 456, 10UNION ALL SELECT 3, 123, 50UNION ALL SELECT 2, 456, 20UNION ALL SELECT 1, 123, 45;
SELECT a.ID, a.DEVICE, a.VALUEFROM (SELECT ID, DEVICE, VALUE, ROW_NUMBER() OVER(PARTITION BY DEVICE ORDER BY ID) AS pos FROM #yourSampleTable) aLEFT OUTER JOIN (SELECT ID, DEVICE, VALUE, ROW_NUMBER() OVER(PARTITION BY DEVICE ORDER BY ID) AS pos FROM #yourSampleTable) b ON a.DEVICE = b.DEVICE AND a.pos = b.pos+1WHERE a.VALUE-b.VALUE > 20;
WITH CTE AS ( SELECT id, device, value, ROW_NUMBER() OVER(ORDER BY device, id) rownum FROM @Table)SELECT a.idFROM CTE aJOIN CTE b ON a.rownum = b.rownum + 1WHERE a.value - b.value > 20;
select t2.IDfrom @tbl as t1 inner join @tbl as t2 on t1.ID = t2.ID -1where t2.VALUE - t1.VALUE > 20