【问题标题】:Segregate the row based on the date time column per each month根据每个月的日期时间列分隔行
【发布时间】:2019-12-01 12:00:39
【问题描述】:

我在 sql server 数据库环境中有下表。

开始日期MM/DD/YYYY的格式。

我需要结果如下表。

根据开始日期列,记录应分隔到开始日期和结束日期之间的每个月

【问题讨论】:

  • [开始日期] 和 [结束日期] 列是什么类型?
  • 两列的类型都是日期时间

标签: sql sql-server database tsql


【解决方案1】:

谢谢戈登·林诺夫 使用 CTE 我得到了以下结果

我的代码

WITH cte 
     AS (SELECT 1                          AS id, 
                Cast('2010-01-20' AS DATE) AS trg, 
                Cast('2010-01-20' AS DATE) AS strt_dte, 
                Cast('2010-03-15' AS DATE) AS end_dte 
         UNION ALL 
         SELECT id, 
                Dateadd(day, 1, Eomonth (trg)), 
                strt_dte, 
                end_dte 
         FROM   cte 
         WHERE  Eomonth(trg) < end_dte) 
SELECT id, 
       trg, 
       strt_dte, 
       end_dte, 
       Lead (trg, 1, end_dte) 
         OVER ( 
           partition BY id 
           ORDER BY trg) AS lead_result 
FROM   cte 

【讨论】:

    【解决方案2】:

    您可以使用递归 CTE:

    with cte as (
          select id, startdate as dte, enddate
          from t
          union all
          select id, 
                 dateadd(day, 1, eomonth(dte)),
                 enddate
          from t
          where eomonth(dte) < enddate
         )
    select id, dte,
           lead(dte, 1, enddate) over (partition by id order by dte)
    from cte;
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 2019-05-25
      • 2019-09-14
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多