gpt4 book ai didi

sql - 减少天数 SQL

转载 作者:行者123 更新时间:2023-12-02 01:05:12 25 4
gpt4 key购买 nike

我有一个非常简单的要求,但我正在努力寻找解决方法。但是,我知道使用代码比使用 SQL 可能更好。

我有一个非常简单的查询:

SELECT
ServiceCode,
StartDate,
Available
FROM @tmpAvailability
ORDER BY StartDate;

产生这样的输出:

Code    |    Dates    |    Available
TEST | 2018-01-04 | 1
TEST | 2018-01-05 | 1
TEST | 2018-01-06 | 0
TEST | 2018-01-07 | 0
TEST | 2018-01-08 | 0
TEST | 2018-01-09 | 0
TEST | 2018-01-10 | 1
TEST | 2018-01-11 | 1
TEST | 2018-01-12 | 1
TEST | 2018-01-13 | 0

我需要的是减少可用天数,例如:

Code    |    Dates    |    Available    |  Days Available
TEST | 2018-01-04 | 1 | 2
TEST | 2018-01-05 | 1 | 1
TEST | 2018-01-06 | 0 | 0
TEST | 2018-01-07 | 0 | 0
TEST | 2018-01-08 | 0 | 0
TEST | 2018-01-09 | 0 | 0
TEST | 2018-01-10 | 1 | 3
TEST | 2018-01-11 | 1 | 2
TEST | 2018-01-12 | 1 | 1
TEST | 2018-01-13 | 0 | 0

最佳答案

通过在可用列上使用带分区的行号和简单的行号,我们可以实现输出

SELECT code,dates,available, 
CASE WHEN days_available=-1 THEN 0 ELSE ROW_NUMBER() over(PARTITION BY days_available ORDER BY dates desc) END as days_available
FROM (
SELECT code,dates,available,CASE WHEN available=0 THEN -1 ELSE rn1-rn2 END AS days_available
FROM (
SELECT k.*,ROW_NUMBER() over(ORDER BY dates) rn1,ROW_NUMBER() over(PARTITION BY available ORDER BY dates) rn2
FROM bltg.mytable k
) AS T1
) fin ORDER BY dates

关于sql - 减少天数 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48094129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com