У меня есть таблица с идентификаторами, датами и флагом. Я хотел бы получить первую запись в течение определенного года, где флаг явно изменился с 0 на 1.
ID DATE FLAG
1 2019-01-31 0
1 2019-02-28 1
1 2019-03-31 1
2 2019-01-31 1
2 2019-02-28 1
2 2019-03-31 1
2 2019-04-30 0
2 2019-05-31 1
3 2019-01-31 0
3 2019-02-28 1
3 2019-03-31 0
3 2019-04-30 1
Так что мой ожидаемый результат будет для 1 , это будет 2019-01-31, 2 будет исключено, а 3 будет 2019-02-28.
Пока у меня есть этот запрос, который работает для большинства часть, но когда я делаю QA, кажется, что запрос не исключает тех, кто начинает с 1, переключается на 0, а затем обратно на 1.
Запрос
SELECT t.ID,
Date,
Flag
FROM table t
WHERE Flag = '1'
AND t.Date > (SELECT MAX(t2.Date) FROM table t2 WHERE t2.ID = t.ID AND t2.Flag = '0' AND t2.Date BETWEEN '2019-01-01' AND '2019-12-31')
AND t.Date BETWEEN '2019-01-01' AND '2019-12-31'
ORDER BY ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date);
Любая помощь будет отличной, спасибо!
РЕДАКТИРОВАТЬ: я добавил SQLFiddle