首页 > 解决方案 > 如何计算 datetime2 部分的出现次数

问题描述

我一直在尝试找出如何对datetime2中的年份进行分组和计数。日期的其余部分无关紧要,只要它具有相同的年份,我希望它被计算和分组。这是我到目前为止的查询。我试图以整数形式获取日期的年份,并使用count方法试试运气,但只有在日期值完全相同时才会计算它。

DECLARE @user_id [int] =12
SELECT [date],user_id, COUNT(YEAR([date])) as yearCount
from table
where table.user_id = @user_id 
group by date,user_id

查询显示的内容:

date                          user_id   yearCount
-------                       -------   -----------
2020-11-12 00:00:00.0000000     12          1
2020-05-23 00:00:00.0000000     12          1
2021-06-01 00:00:00.0000000     12          1
2021-04-15 00:00:00.0000000     12          1
2022-02-20 00:00:00.0000000     12          1
2022-01-20 00:00:00.0000000     12          1

我希望它看起来像什么:

date                          user_id   yearCount
-------                       -------   -----------
2020-11-12 00:00:00.0000000     12          2
2020-05-23 00:00:00.0000000     12          2
2021-06-01 00:00:00.0000000     12          2
2021-04-15 00:00:00.0000000     12          2
2022-02-20 00:00:00.0000000     12          2
2022-01-20 00:00:00.0000000     12          2

标签: sqlsql-serverdatetsqldatetime

解决方案


您可以使用窗口版本count()并按年份分区(以及可选的用户 ID——如果您真的只在结果中包含一个用户 ID,您也可以省略它)。

SELECT date,
       user_id,
       count(*) OVER (PARTITION BY year(date),
                                   user_id) yearcount
       FROM elbat
       WHERE user_id = @user_id;

推荐阅读