1

我想在我的博客上显示文章的存档(按月和年),但我不知道如何编写 sql select 命令。

我有表Articles并且有列(它是日期时间类型),我必须为此表PublishDate选择唯一的,但仅限于月份和年份。PublishDate

例如,如果我在 2013 年 9 月有 3 个帖子,那么 2013 年 9 月只会显示一次。

结果应该是这样的:

September 2013
Novermber 2013
January 2012
etc.

有人可以帮我处理这个 TSQL 选择命令吗?

4

3 回答 3

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;
于 2013-08-02T22:25:18.100 回答
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

PublishDate这仅选择每个年月组的第一个(根据)记录。用于DATENAME(month, PublishDate)获取月份的名称。

于 2013-08-02T22:26:59.873 回答
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;
于 2013-09-26T02:47:10.710 回答