我有一個查詢(用於bug tracker.net),它按周狀態計算每週的bug數量。但是,該查詢返回的週數,我真正想要的是一週的第一天SQL Server - 給定週數,在一週內獲取第一個日期?
select datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date)))
as [week], bg_status , st_name as [status], count(*) as [count]
from bugs inner join statuses on bg_status = st_id
group by datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))),
bg_status, st_name
order by [week], bg_status
是得到週數的部分是
datepart(wk, DateAdd(day, 0, DateDiff(day, 0, bg_reported_date))) as [week]
它返回的輸出:
week bg_status status count
----------- ----------- --------------------------------------------- ------
22 1 new 1
22 5 closed 32
但倒不如說每個星期的第一天,如01-01-2010,那麼2010年8月1日,等
問題不是How do you get the "week start date" and "week end date" from week number in SQL Server?重複(回答說如何從一個日期從一週數量得到周開始不)
不是Calculate date from week number重複(問題問的C#)
不是Get first date of week from provided date重複(問題問的JavaScript)
我沒有搜索,但沒有找到這個問題的回答爲SQL Server(2010,如果它事項)
'DateAdd(day,0,DateDiff(day,0,bg_reported_date))'做什麼?我懷疑它可以被簡化。 – Gabe 2010-07-26 05:27:09
@Gabe:我認爲內部的DateDiff()計算'date 0'和bug報告日期之間的天數。外部的DateAdd()然後將該天數添加到'日期0',給出DATE值(或者可能是0小時0分鐘0秒的DATETIME值)。如果這可以簡化,我認爲簡化可能是'CAST(bg_reported_date AS DATE)',如'星期開始'表達式中所用。 – 2010-07-26 06:20:40
Jonathan:這就是我的想法,但沒有任何意義,爲什麼你會在調用'DATEPART'時使用它。在給定日期的所有時間總是應該返回同一周的數字。 – Gabe 2010-07-26 06:39:58