Na postgreSQL, bo nie chciało mi się na MS. Ale to "czysty SQL", więc wszędzie powinno pójść:
/* -- tworzenie tabeli i danych
BEGIN
CREATE TEMP TABLE table1
(ID int, DZIEN date, PESEL int, DOCHOD int)
ON COMMIT DROP
;
INSERT INTO Table1
(ID, DZIEN, PESEL, DOCHOD)
VALUES
(1, '2016-10-01 00:00:00', 111222, 1000),
(2, '2016-10-02 00:00:00', 111222, 2000),
(3, '2016-10-01 00:00:00', 112233, 500),
(4, '2016-10-03 00:00:00', 112233, 700),
(5, '2016-10-05 00:00:00', 112233, 900),
(6, '2016-10-03 00:00:00', 123456, 2000),
(7, '2016-10-05 00:00:00', 123456, 2000)
;
*/
select x.*, t.dochod, x.dochod-t.dochod roznica from (
select DZIEN,PESEL,DOCHOD,(SELECT Max(DZIEN) FROM table1 WHERE PESEL=t.PESEL and DZIEN<t.DZIEN) poprzedni FROM table1 t
) x JOIN table1 t ON t.dzien=x.poprzedni AND t.pesel=x.pesel
WHERE x.dochod-t.dochod /* czyli roznica */ >=500;
Sprawdz sobie zarowno z WHERE jak i bez niego.
Sprawdz tez co się stanie, gdy zamienisz JOIN na LEFT JOIN