2015-01-15 38 views
1

我想伯爵的學生通過他們目前的年齡從2010年DATEDIFF和COUNT

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' 

但我不知道在哪裏可以從這裏走。

預先感謝您。

+1

你不能只用'DATEDIFF(YEAR,...)'來計算年齡,因爲這是出生12月31日一個人就擁有1年機構,如果你計算1月1日年齡 – Lamak 2015-01-15 16:20:46

回答

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) 
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) 
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