簡體   English   中英

SQL - 按年,月,日更新日期組

[英]SQL - date group by year, month, days - update

我使用代碼來計算兩個日期組之間的差異,按年,月,日期:

;WITH calendar AS (
SELECT  CAST(MIN([From date]) as datetime) as d,
    MAX([To date]) as e
FROM ItemTable
UNION ALL
SELECT  DATEADD(day,1,d),
    e
FROM calendar
WHERE d < e
), cte AS(
SELECT  i.Item,
    DATEPART(year,c.d) as [Year],
    DATEDIFF(month,MIN(c.d),MAX(c.d)) as NoOfMonth,
    DATEDIFF(day,DATEADD(month,DATEDIFF(month,MIN(c.d),MAX(c.d)),MIN(c.d)), 
  MAX(c.d)) as NoOfDays
FROM ItemTable i
INNER JOIN calendar c
ON c.d between i.[From date] and i.[To date]
GROUP BY i.Item, DATEPART(year,c.d),[From date],[To date]
)

SELECT  Item,
    [Year],
    SUM(NoOfMonth) as NoOfMonth,
    SUM(NoOfDays) as NoOfDays
FROM cte
GROUP BY Item,[Year]
ORDER BY Item
OPTION (MAXRECURSION 0)

我在SQL中找到了這個代碼- 按年,月,日分組的日期

但不適合我......

當我執行我的查詢

SELECT Item,
[From date],
[To date]
 from ItemDate;

我有

('A1','2013-08-27','2013-09-27'),
('A1','2013-09-28','2013-11-28'),
('A1','2013-11-30','2013-12-03'),
('A1','2013-12-31','2014-03-31'),
('A1','2014-04-01','2014-07-01'),
('A1','2014-07-02','2014-10-02'),
('A1','2014-10-03','2014-12-31')

當從這個鏈接執行代碼時, SQL - 日期組按年,月,日

我明白了:

 Item      Year         NoOfMonth     NoOfDays 
  A1        2013           4             -27
  A2        2014           10            58

這不好...... 2013年應為3個月和4天,2014年為11個月和28天

如何更新代碼以獲得所需的結果?

將最后一個選擇更改為:

SELECT  Item,
        [Year],
        CASE WHEN SUM(NoOfDays) < 0 THEN SUM(NoOfMonth)-1 
            WHEN SUM(NoOfDays) > 30 THEN SUM(NoOfMonth)+1 
            ELSE SUM(NoOfMonth) END as NoOfMonth,
        CASE WHEN SUM(NoOfDays) >= 30 THEN SUM(NoOfDays)-30 
            WHEN SUM(NoOfDays) < 0 THEN SUM(NoOfDays)+30
            ELSE SUM(NoOfDays) END as NoOfDays
FROM cte
GROUP BY Item,[Year]
ORDER BY Item
OPTION (MAXRECURSION 0)

這種報告的主要問題 - 很難定義什么是1個月 ,DATEDIFF只需要從2個日期開始,然后從另一個日期中減去。

我已經選擇30作為月份的天數,現在我將天數值與30進行比較,因此如果天數低於零或低於30,我們可以將+1添加到月份

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM