DATEDIFF和COUNT

时间:2015-01-15 16:18:12

标签: sql datediff

我想按自2010年以来注册的所有学生的年龄计算学生。

即。

16 - 2
17 - 5
19 - 5

在当前的#34;学生"表,我有学生的DOB和registration_date。我正在使用Management Studio。

到目前为止,我有:

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

但我不确定从哪里开始。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

试试这个。

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)

答案 1 :(得分:0)

您可能需要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)

答案 2 :(得分:0)

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

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

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