【问题标题】:How to count occurrences of parts of datetime2如何计算 datetime2 部分的出现次数
【发布时间】:2021-06-07 21:12:24
【问题描述】:

我一直在尝试找出如何对 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

【问题讨论】:

    标签: sql sql-server date tsql datetime


    【解决方案1】:

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

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

    【讨论】:

    • 完全做到了!谢谢!
    • @sticky bit 如果我试图将 yearCount 放入变量中,你会怎么做?我还想问的是,如果我要进行一个查询,它采用像 2021 这样的整数并将其放入变量 yearCount 中,那会是什么样子?我犯了一个错误,没有说出我想问的问题(是的,我很笨)我应该编辑这个还是提出一个新问题?
    • @scarp:这是一个新问题,这个问题已经回答了。
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2017-06-30
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多