sql-server - SQL 计数两个日期范围之间的年龄

标签 sql-server datetime count range

我正在尝试计算数据库中事件记录从当前日期到可能的过去日期的年龄。 这是可能的输出:

15岁至24岁
12

24岁至30岁
15

30岁及以上
25

并计算年龄

age     count
15        3
16        5
17        1
18        2
19        1
20        0
....     ....

最佳答案

要计算年龄:

;With Ages
AS
(
    SELECT CASE 
            WHEN MONTH(getdate()) > MONTH([YourDate]) THEN DATEDIFF(YEAR, [YourDate], getdate())
            WHEN Month([YourDate]) = MONTH(Getdate()) AND Day([YourDate]) < Day(getdate())
            THEN DATEDIFF(YEAR, [YourDate], getdate()) 
            ELSE DATEDIFF(YEAR, [YourDate], getdate())  - 1 END As Age
    FROM #YourTable
)
SELECT Age, count(*) AS [Count]
FROM Ages
GROUP BY Age

并获取日期范围计数:

;With Ages
AS
(
    SELECT CASE 
            WHEN MONTH(getdate()) > MONTH([YourDate]) THEN DATEDIFF(YEAR, [YourDate], getdate())
            WHEN Month([YourDate]) = MONTH(Getdate()) AND Day([YourDate]) < Day(getdate())
            THEN DATEDIFF(YEAR, [YourDate], getdate()) 
            ELSE DATEDIFF(YEAR, [YourDate], getdate())  - 1 END As Age
    FROM #YourTable
),
AgeCount
AS
(
    SELECT Age, count(*) AS [Count]
    FROM Ages
    GROUP BY Age
)
SELECT  SUM(CASE WHEN Age >= 15 and Age < 24 THEN 1 ELSE 0 END) As [15-24],
        SUM(CASE WHEN AGE >= 25 AND Age < 30 Then 1 ELSE 0 END) As [25-30],
        SUM(CASE WHEN AGE > 30 THEN 1 ELSE 0 END) AS [Over 30]
From AgeCount

关于sql-server - SQL 计数两个日期范围之间的年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26095257/

相关文章:

c# - 解析 Postman 中的日期对象以转换为 C# DateTime

c++ - arduino count++ 有限制吗?如何解决?

php - Doctrine - 使用 HAVING 子句时的 COUNT 行

android - Facebook 返回错误的帖子评论数

sql - 我在多个表中具有相同的列,并且希望将所有表中的该列更新为特定值。我怎样才能做到这一点?

sql-server - SQL Server 生产服务器 - 所有数据库均处于恢复挂起状态

sql-server - 从 SQL Server 生成事件

python - 如何将小时添加到 Pandas 数据框列

Sql Server - 结果空间不足,无法将 uniqueidentifier 值转换为 char

c# - 比较 DateTime 结构以查找空闲槽