日期差异和计数

DATEDIFF and COUNT

我想统计自 2010 年以来注册的所有学生的当前年龄。

16 - 2
17 - 5
19 - 5

目前"student"table,我有学生的DOB和registration_date。我正在使用 Management Studio。

到目前为止我有:

SELECT COUNT (*) 
FROM db.student 
WHERE DATEDIFF(year, DOB, CURRENT_TIMESTAMP) AND registration_date >= '2010-01-01'

但我不确定从这里到哪里去。

提前致谢。

您可能需要 GROUP BY。大概是这样的吧?

SELECT DATEDIFF(year, DOB, CURRENT_TIMESTAMP), COUNT (*) FROM db.student 
WHERE registration_date >= '2010-01-01'
GROUP BY DATEDIFF(year, DOB, CURRENT_TIMESTAMP)

要获得准确的年龄,您需要考虑年、月和日。

要获得按年龄分组的学生人数,您的代码为:

SELECT
   Datediff(yyyy,DOB, CURRENT_TIMESTAMP)
    +   Case 
            When
            (
                    Datepart(mm,DOB) > Datepart(mm,CURRENT_TIMESTAMP)
                Or  (
                            Datepart(mm,DOB) = Datepart(mm,CURRENT_TIMESTAMP)
                        And Datepart(dd,DOB) > Datepart(dd,CURRENT_TIMESTAMP) 
                    )
            )
            Then -1
            Else 0
        End As Age,
   Count(*)
FROM
   db.student 
WHERE
   registration_date >= '2010-01-01'    SELECT
   Datediff(yyyy,DOB, CURRENT_TIMESTAMP)
    +   Case 
            When
            (
                    Datepart(mm,DOB) > Datepart(mm,CURRENT_TIMESTAMP)
                Or  (
                            Datepart(mm,DOB) = Datepart(mm,CURRENT_TIMESTAMP)
                        And Datepart(dd,DOB) > Datepart(dd,CURRENT_TIMESTAMP) 
                    )
            )
            Then -1
            Else 0
        End As Age,
   Count(*)
FROM
   db.student 
WHERE
   registration_date >= '2010-01-01'
GROUP BY
   Datediff(yyyy,DOB, CURRENT_TIMESTAMP)
    +   Case 
            When
            (
                    Datepart(mm,DOB) > Datepart(mm,CURRENT_TIMESTAMP)
                Or  (
                            Datepart(mm,DOB) = Datepart(mm,CURRENT_TIMESTAMP)
                        And Datepart(dd,DOB) > Datepart(dd,CURRENT_TIMESTAMP) 
                    )
            )
            Then -1
            Else 0
        End

试试这个。

select DATEDIFF(Year,DOB,CURRENT_TIMESTAMP) age,Count(ID) users from dbo.student  where DatePart(year,registration_date)>=2010
GROUP BY  DATEDIFF(Year,DOB,CURRENT_TIMESTAMP)