SQL值更改后如何检索第一行?

问题描述 投票:3回答:2

我有一个带有ID,日期和标志的表。我想检索某年内标志从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。

到目前为止,我对这个查询大部份都可以使用,但是当我进行质量检查时,该查询似乎并不排除那些从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 ...

mysql sql gaps-and-islands
2个回答
1
投票

使用lag()获取上一个标志,然后进行聚合:


0
投票

我知道您想要第一个1-仅用于以0开头的系列。

© www.soinside.com 2019 - 2024. All rights reserved.