[英]DATEDIFF and COUNT
我想按當前年齡計算2010年以來注冊的所有學生。
即
16-2
17-5
19-5
在當前的“學生”表中,我有學生的DOB和registration_date。 我正在使用Management Studio。
到目前為止,我有:
SELECT COUNT (*)
FROM db.student
WHERE DATEDIFF(year, DOB, CURRENT_TIMESTAMP) AND registration_date >= '2010-01-01'
但不知道從這里去哪里。
先感謝您。
嘗試這個。
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)
您可能需要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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.