我有一个带有ID,日期和标志的表。我想检索某年内标志从0显式更改为1的第一条记录。
将是2019-01-31,2将被排除,3将是2019-02-28。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
到目前为止,我对这个查询大部份都可以使用,但是当我进行质量检查时,该查询似乎并不排除那些从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
我有一个带有ID,日期和标志的表。我想检索标志从0显式更改为1的特定年份的第一条记录。ID DATE FLAG 1 2019-01-31 ...
使用lag()
获取上一个标志,然后进行聚合:
我知道您想要第一个1
-仅用于以0
开头的系列。