2013-08-02 57 views
1

我想顯示在我的博客文章歸檔(按月和年),我不知道如何編寫sql select命令。TSQL顯示博客檔案

我有表Articles,並有PublishDate(這是日期時間類型)列,我必須爲此表選擇唯一的PublishDate,但僅限於月和年。

例如,如果我在2013年9月有3個帖子,那麼2013年9月將只顯示一次。

結果應該是這樣的:

September 2013 
Novermber 2013 
January 2012 
etc. 

有人可以幫我這個TSQL SELECT命令?

+0

聽起來像是你只需要使用[DISTINCT](http://www.w3schools.com/sql/sql_distinct.asp)。 – Mike

回答

2

可以形成要通過使用SQL Server日期函數日期:

select distinct datename(mm, PublishDate)+' '+cast(year(PublishDate) as varchar(255)) 
from Articles a 

因爲你大概想這些是按日期順序,使用group by代替:

select datename(mm, PublishDate)+' '+cast(year(PublishDate) as varchar(255)) 
from Articles a 
group by datename(mm, PublishDate)+' '+cast(year(PublishDate) as varchar(255)) 
order by max(PublishDate) desc; 
+0

很好,我怎麼能得到更多的列像[ArticleName]? – Earlgray

+0

@Earlgray。 。 。您可以使用聚合類似'min(ArticleName)'的查詢的第二種形式。 –

0

你可以使用ROW_NUMBER

WITH CTE AS(
    SELECT a.*, 
      DATENAME(month, PublishDate) AS MonthPublished, 
      RN = ROW_NUMBER()OVER(PARTITION BY YEAR(PublishDate),MONTH(PublishDate) 
           ORDER BY PublishDate ASC) 
    FROM dbo.Articles a 
) 
SELECT * FROM CTE WHERE RN = 1 

這隻選擇第一個(ac根據PublishDate)記錄每個年 - 月組。 使用DATENAME(month, PublishDate)獲取月份的名稱。

0

基於由@GordonLinoff答案,我想出了這個查詢與文章的數量一起返回月份的名稱,和月/年數:

SELECT DATENAME(mm, PublishDate)+' '+CAST(YEAR(PublishDate) as varchar(255)) AS [monthName], MONTH(PublishDate) AS [month], YEAR(PublishDate) AS [year], COUNT(PublishDate) AS [count] 
FROM Articles 
WHERE status > 0 
GROUP BY DATENAME(mm, PublishDate)+' '+CAST(YEAR(PublishDate) as varchar(255)), MONTH(PublishDate), YEAR(PublishDate) 
ORDER BY MAX(PublishDate) DESC;