2016-04-21 86 views
1

我有麻煩雙週數項(在週五結束)SQL服務器:盤點日期與

表像雙週日期:

+------------+------------+ 
| ItemNumber | Date | 
+------------+------------+ 
|  235 | 2016-03-02 | 
|  456 | 2016-03-04 | 
|  454 | 2016-03-08 | 
|  785 | 2016-03-10 | 
|  123 | 2016-03-15 | 
|  543 | 2016-03-18 | 
|  863 | 2016-03-20 | 
|  156 | 2016-03-26 | 
+------------+------------+ 

結果:

+-------+------------+ 
| Total | biWeek | 
+-------+------------+ 
|  4 | 2016-03-11 | 
|  3 | 2016-03-25 | 
|  1 | 2016-04-08 | 
+-------+------------+ 

回答

4

如果我的理解你的問題正確,像這樣的事情應該工作:

select 
    sum(1), 
    dateadd(day, ceiling(datediff(day,4, [Date])/14.0) * 14, 4) 
from 
    yourtable 
group by 
    dateadd(day, ceiling(datediff(day,4, [Date])/14.0) * 14, 4) 

這會計算日期與「第4天」之間的日期差異。 5.1.1900,將它與14(四捨五入)相乘並乘以14得到biweeks,然後將其添加到「第4天」。

+0

這太好了。只是一個小問題。如果在兩週內沒有日期,則不會顯示該星期五的日期。例如,如果在'2016-03-25'周內沒有項目,我想顯示Total:0;日期:'2016-03-25'。現在它不會顯示'2016年3月25日',如果我沒有該周的數據 – sylanter

+0

@sylanter那麼你需要使用日期表(或理貨)來填充缺失的日期,例如通過加入它這個選擇的結果 –

+0

謝謝。和我想的一樣。我只是想看看有沒有更好的方法。 – sylanter

0
SELECT anyColumn, …, dateadd(week, datediff(week, 0, dateColumn)/2 * 2 , 0) as biweekly 
FROM table 
WHERE condition 
GROUP BY anyColumn, …, dateadd(week, datediff(week, 0, dateColumn)/2 * 2 , 0) 

此計算dateColumn是多少個星期,從日0爲止,然後除以2這種差異的商2,讓你2周的間隔相乘。通過將這兩個星期的間隔添加到日期0,您將獲得2周的時間段。

+0

完成先生!感謝您的評論。 –