gpt4 book ai didi

sql-server - SQL 多个开始日期到结束日期

转载 作者:行者123 更新时间:2023-11-30 23:49:32 24 4
gpt4 key购买 nike

我有一个具有以下格式的表格(我无法更改)

ClientID  |  RefAd1  |  Cluster Start Date  |  Cluster End Date

100001 | R1234 | 2014-11-01 |
100001 | R1234 | 2014-11-10 |
100001 | R1234 | 2014-11-20 |

我想得出的是:

ClientID  |  RefAd1  |  Cluster Start Date  |  Cluster End Date

100001 | R1234 | 2014-11-01 | 2014-11-10
100001 | R1234 | 2014-11-10 | 2014-11-20
100001 | R1234 | 2014-11-20 | NULL

我在这里搜索过,自己也尝试过很多次,但就是无法正常工作。

我无法更新源表(或将另一个表添加到数据库中)所以我将在 View 中执行此操作(我可以保存)

任何帮助将不胜感激,现在已经绕了一天又一点!

最佳答案

使用Self join获取下一条记录

;WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY [Cluster Start Date])RNO,*
FROM YOURTABLE
)
SELECT C1.ClientID,C1.RefAd1,C1.[Cluster Start Date],C2.[Cluster Start Date] [Cluster End Date]
FROM CTE C1
LEFT JOIN CTE C2 ON C1.RNO=C2.RNO-1

编辑:

要更新表格,您可以使用以下查询

;WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY [Cluster Start Date])RNO,*
FROM #TEMP
)
UPDATE #TEMP SET [Cluster End Date] = TAB.[Cluster End Date]
FROM
(
SELECT C1.ClientID,C1.RefAd1,C1.[Cluster Start Date],C2.[Cluster Start Date] [Cluster End Date]
FROM CTE C1
LEFT JOIN CTE C2 ON C1.RNO=C2.RNO-1
)TAB
WHERE TAB.[Cluster Start Date]=#TEMP.[Cluster Start Date]

编辑 2:

如果您希望为 ClientIdRefAd1 完成此操作。

;WITH CTE AS
(
-- Get current date and next date for each type of ClientId and RefAd1
SELECT ROW_NUMBER() OVER(PARTITION BY ClientID,RefAd1 ORDER BY [Cluster Start Date])RNO,*
FROM #TEMP
)
UPDATE #TEMP SET [Cluster End Date] = TAB.[Cluster End Date]
FROM
(
SELECT C1.ClientID,C1.RefAd1,C1.[Cluster Start Date],C2.[Cluster Start Date] [Cluster End Date]
FROM CTE C1
LEFT JOIN CTE C2 ON C1.RNO=C2.RNO-1 AND C1.ClientID=C2.ClientID AND C1.RefAd1=C2.RefAd1
)TAB
WHERE TAB.[Cluster Start Date]=#TEMP.[Cluster Start Date] AND TAB.ClientID=#TEMP.ClientID AND TAB.RefAd1=#TEMP.RefAd1

如果您只想为 ClientId 执行此操作,请删除 RefAd1 的条件

关于sql-server - SQL 多个开始日期到结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191139/

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