在两个日期之间添加字段sql
我有数据可以按月拆分记录,但我想将它们从开始日期到结束日期折叠成一个连续记录。我有这样做的代码,但我不能总结该时间段的付款 例如: 付款ID开始日期结束日期 3800 456 2016-02-21 2016-02-28 1500 456 2016-09-01 2016-09-30 12600 456 2016-10-01 2016-10-31 12200 456 2016-11-01 2016-11-30 3600 456 2016-12-01 2016-12-10 我需要2月记录的付款保持不变,但9月至12月记录崩溃为1,我需要对这4行的付款进行合计 这是我目前掌握的代码在两个日期之间添加字段sql,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有数据可以按月拆分记录,但我想将它们从开始日期到结束日期折叠成一个连续记录。我有这样做的代码,但我不能总结该时间段的付款 例如: 付款ID开始日期结束日期 3800 456 2016-02-21 2016-02-28 1500 456 2016-09-01 2016-09-30 12600 456 2016-10-01 2016-10-31 12200 456 2016-11-01 2016-11-30 3600 456 2016-12-01
SELECT *
, ROW_NUMBER() OVER (PARTITION BY T.ID ORDER BY T.STARTDATE) AS [ROW]
INTO #TEMP2
FROM #FINALRECORDS AS T
-- START DATES
SELECT T.*
, CASE
WHEN DATEADD(DAY,-1,T.STARTDATE) = T1.ENDDATE
THEN 0
ELSE 1
END AS [New]
INTO #NEW
FROM #TEMP2 AS T
LEFT JOIN #TEMP2 AS T1 ON T.ID= T1.ID AND T.ROW = T1.ROW +1
-- END DATES
SELECT T.*
, CASE
WHEN DATEADD(DAY,1,T.ENDDATE) = T1.ENDDATE
THEN 0
ELSE 1
END AS [End]
INTO #END
FROM #TEMP2 AS T
LEFT JOIN #TEMP2 AS T1 ON T.ID= T1.ID AND T.ROW = T1.ROW -1
-- SINGLE RECORD WITH START AND END DATE
SELECT *
FROM (
SELECT T.*
, T1.ENDDATE AS [NEW_DISCHAGE]
, SUM(T.PAYMENT) AS [NEW_PAY]
, ROW_NUMBER() OVER (PARTITION BY T.ID, T.ROW ORDER BY T1.ENDDATE) AS [ROW2]
FROM #NEW AS T
INNER JOIN #END AS T1 ON T.ID= T1.ID AND T.ROW <= T1.ROW
WHERE T.New = 1
AND T1.[END] = 1
GROUP BY T.ID, T.STARTDATE, T1.ENDDATE, T.ROW
) AS A
WHERE A.ROW2 = 1
我想要的输出有点像这样:
付款ID开始日期结束日期
3800 456 2016-02-21 2016-02-28
29900 456 2016-09-01 2016-09-30
ETA:一个更好的例子那么你想要按年度的付款总额
create table #stuff (payment int, id int, startdate date, enddate date)
insert into #stuff values
(3800, 456, '2015-02-21','2015-02-28'),
(1500, 456, '2016-09-01','2016-09-30'),
(12600, 456, '2016-10-01','2016-10-31'),
(12200, 456, '2016-11-01','2016-11-30'),
(3600, 456, '2016-12-01','2016-12-10')
select
sum(payment) as payment,
id,
min(startdate) as startdate,
max(enddate) as enddate
from #stuff
group by id, year(enddate)
请给出:
付款id开始日期结束日期
3800 456 2015-02-21 2015-02-28
29900 456 2016-09-01 2016-12-10您需要向我们提供一些表格和数据的详细信息,以便我们提供帮助。这是一个很好的起点。不,不是一年一次,只是每次相遇。我不能像那样手动输入日期值,因为还有大约9000行。手动输入是什么意思?CREATETABLE语句只是重新创建示例。还有,你所说的遭遇是什么意思?