在两个日期之间添加字段sql

在两个日期之间添加字段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

我有数据可以按月拆分记录,但我想将它们从开始日期到结束日期折叠成一个连续记录。我有这样做的代码,但我不能总结该时间段的付款

例如:

付款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行的付款进行合计

这是我目前掌握的代码

    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语句只是重新创建示例。还有,你所说的遭遇是什么意思?