SQL服务器table改造
SQL Server table transformation
我有一个 table 像这样的东西:
due_date
flag
2019-02-01
FALSE
2019-01-01
FALSE
2018-12-01
FALSE
2018-11-01
TRUE
2018-10-01
FALSE
2018-09-01
FALSE
2018-08-01
TRUE
输出table是:
due_date
flag
group
2019-02-01
FALSE
1
2019-01-01
FALSE
1
2018-12-01
FALSE
1
2018-11-01
TRUE
2
2018-10-01
FALSE
3
2018-09-01
FALSE
3
2018-08-01
TRUE
4
我试过使用滞后函数,使用这个查询
SELECT
*,
LAG(flag, 1, 'FALSE') OVER (ORDER BY due_date DESC) AS lag_flag
FROM
tableName
结果会变成这样:
due_date
flag
lag_flag
2019-02-01
FALSE
FALSE
2019-01-01
FALSE
FALSE
2018-12-01
FALSE
FALSE
2018-11-01
TRUE
FALSE
2018-10-01
FALSE
TRUE
2018-09-01
FALSE
FALSE
2018-08-01
TRUE
FALSE
现在我卡在了这一步。任何人都可以向我建议下一步? (也请告诉我查询)
注意:我使用的是SQL服务器
用 1 标记一组的开始并计算起始标记的滚动总数。
select due_date, flag, sum(f) OVER (ORDER BY due_date desc) x
from(
select due_date, flag,
case when LAG(flag, 1, 'unknown') OVER (ORDER BY due_date desc) = flag then 0 else 1 end f
from tbl
) t
ORDER BY due_date desc
我有一个 table 像这样的东西:
due_date | flag |
---|---|
2019-02-01 | FALSE |
2019-01-01 | FALSE |
2018-12-01 | FALSE |
2018-11-01 | TRUE |
2018-10-01 | FALSE |
2018-09-01 | FALSE |
2018-08-01 | TRUE |
输出table是:
due_date | flag | group |
---|---|---|
2019-02-01 | FALSE | 1 |
2019-01-01 | FALSE | 1 |
2018-12-01 | FALSE | 1 |
2018-11-01 | TRUE | 2 |
2018-10-01 | FALSE | 3 |
2018-09-01 | FALSE | 3 |
2018-08-01 | TRUE | 4 |
我试过使用滞后函数,使用这个查询
SELECT
*,
LAG(flag, 1, 'FALSE') OVER (ORDER BY due_date DESC) AS lag_flag
FROM
tableName
结果会变成这样:
due_date | flag | lag_flag |
---|---|---|
2019-02-01 | FALSE | FALSE |
2019-01-01 | FALSE | FALSE |
2018-12-01 | FALSE | FALSE |
2018-11-01 | TRUE | FALSE |
2018-10-01 | FALSE | TRUE |
2018-09-01 | FALSE | FALSE |
2018-08-01 | TRUE | FALSE |
现在我卡在了这一步。任何人都可以向我建议下一步? (也请告诉我查询)
注意:我使用的是SQL服务器
用 1 标记一组的开始并计算起始标记的滚动总数。
select due_date, flag, sum(f) OVER (ORDER BY due_date desc) x
from(
select due_date, flag,
case when LAG(flag, 1, 'unknown') OVER (ORDER BY due_date desc) = flag then 0 else 1 end f
from tbl
) t
ORDER BY due_date desc