我想按自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'
但我不确定从哪里开始。
提前谢谢。
答案 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