2012-11-07 34 views
1

下面的語句:按SQL分組,但顯示完整的日期時間?

group by datepart(wk, createdon) 

組所選行根據其下跌的一週。我的select語句顯示如下:

SELECT 
    datepart(wk, createdon) week, 

如何顯示星期幾(「2012年12月10日」)的實際日期時間,而非數(「12」)?

+0

是否要顯示每行的createdon實際值?如果你這樣做,那麼你不能按照星期來「分組」行。您是否想要顯示某個特定星期的某個特定日期,例如相應的星期一的日期,或者其他類似的日期?如果是這樣,我們需要知道哪一個。 –

+0

如果您在同一周內有多個日期,您想顯示什麼? – Taryn

+0

我想顯示本週開始的實際日期 - 比如「date of」+ createdon。 – RobVious

回答

2

如果我理解正確的話,你想按周也返回完整的日期時間。您必須將所選字段包含在聚合列中。 正是如此應該工作:

SELECT DATEPART(wk, createdon) week, createdon 
FROM TableName 
GROUP BY DATEPART(wk, createdon), createdon 

文選MSSQL2008R2

編輯: 由於OP似乎希望在一週的開始日期,因此具有answer

+0

這是一個寫得很好的答案,但它似乎沒有解決原始海報的需求,因爲此方法不會將同一周內的行組合在一起。 (除非我錯過了什麼?) –

+0

LOL,正如我所說,*如果*我明白......現在看來OP想要顯示一週的開始「日」的「日期」。 – Rehovoth

+0

因此,我認爲已經有了[答案](http://stackoverflow.com/questions/7168874/get-first-day-of-week-in-sql-server)。 – Rehovoth

1

你不能按一個星期分組,然後顯示它的組成部分,即天。您將需要按日期分組。

2

一種選擇是使用CTE與ROW_NUMBER代替:

WITH CTE AS 
(
    SELECT 
     RN = ROW_NUMBER() OVER (PARTITION BY datepart(wk, createdon) ORDER BY createdon) 
    , DATEADD(ww, DATEDIFF(ww,0,createdon), 0) As Week 
    , * 
    FROM dbo.Table 
) 
SELECT * FROM CTE 
WHERE RN = 1 
+0

Everyone:不要忽視這個答案。它提供了一種優雅的方式來完成我們以前在臨時表中所做的事情。 +1 –