日期差异和计数
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)
我想统计自 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)