首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日期时间范围之间的组值

日期时间范围之间的组值
EN

Stack Overflow用户
提问于 2020-11-04 13:00:50
回答 1查看 61关注 0票数 1

我有张桌子看起来像这样:

我想将数据顺序按daydifference=1分组,日差大于1的行将在有difference=1的日子之间分组,如下所示:

所以我就这么做了:

代码语言:javascript
复制
SELECT 
    InicialData
    ,FinalDate
    FROM #ValueAnalysis
    WHERE WorkDays=1
    GROUP BY InicialData, FinalDate

现在我想加入日差大于1的订单,有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 13:35:48

如果您拥有Server 2017或更高版本,则可以使用阿格。例如:

代码语言:javascript
复制
SELECT va.InitialDate, 
       va.FinalDate, 
       STRING_AGG(cc.Order_,',') WITHIN GROUP (ORDER BY cc.Order_ ASC) as Order_1
FROM ValueAnalysis va 
OUTER APPLY (
    SELECT Order_
    FROM ValueAnalysis 
    WHERE va.InitialDate = InitialDate or va.FinalDate = FinalDate
) as cc
WHERE DayDiff = 1
GROUP BY va.InitialDate, va.FinalDate

输出:

代码语言:javascript
复制
| InitialDate |  FinalDate | Order_1 |
|-------------|------------|---------|
|  2020-01-02 | 2020-01-02 |   21,23 |
|  2020-01-03 | 2020-01-03 |      22 |
|  2020-01-04 | 2020-01-04 |   23,24 |

EDIT#1

如果需要生成新表并包含不在原始数据集中的日期,则可以使用递归CTE:

代码语言:javascript
复制
;WITH cte AS (
    SELECT MIN(InitialDate) InitialDate, 
           MAX(FinalDate) FinalDate, 
    FROM ValueAnalysis
    UNION ALL
    SELECT DATEADD(day,1,InitialDate)
           FinalDate
    FROM cte
    WHERE InitialDate < FinalDate
)

SELECT c.InitialDate InitialDate, 
       c.InitialDate FinalDate, 
       STRING_AGG(va.Order_,',') WITHIN GROUP (ORDER BY va.Order_ ASC) as Order_1
FROM cte c 
LEFT JOIN ValueAnalysis va
    ON va.InitialDate = c.InitialDate or va.FinalDate = c.InitialDate
GROUP BY c.InitialDate, c.FinalDate
OPTION (MAXRECURSION 100)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64680600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档