计数基于年龄SQL

计数基于年龄SQL

问题描述:

我有以下的T-SQL来计算年龄:计数基于年龄SQL

SELECT 
    Member_ID, 
    DATEDIFF(YY,DOB,GETDATE()) - 
    CASE 
    WHEN DATEADD(YY,DATEDIFF(YY,DOB,GETDATE()),DOB) > GETDATE() THEN 1 
    ELSE 0 
    END AS Age in Years 
FROM MEMBER 
WHERE YEAR(registration_date) >= 2012 

如何计算成员ID的每个年龄段的年数?

+0

您是否尝试过使用计数? http://www.w3schools.com/sql/sql_func_count.asp – 2014-08-31 23:14:49

+0

我该放什么?谢谢。 – nk10 2014-08-31 23:17:07

+0

@Bennef [请不要使用w3schools作为参考。](http://www.w3fools.com) – Kermit 2014-08-31 23:22:18

事情是这样的:

SELECT 
-- Member_ID, commented out 
DATEDIFF(YY,DOB,GETDATE()) - 
CASE 
WHEN DATEADD(YY,DATEDIFF(YY,DOB,GETDATE()),DOB) > GETDATE() THEN 1 
ELSE 0 
END AS Age in Years 
, count(member_id) membersWithThisAge 
FROM MEMBER 
WHERE YEAR(registration_date) >= 2012 
group by DATEDIFF(YY,DOB,GETDATE()) - 
CASE 
WHEN DATEADD(YY,DATEDIFF(YY,DOB,GETDATE()),DOB) > GETDATE() THEN 1 
ELSE 0 
END 

的member_id不能包括选择子句。如果是这样,那么你会得到每个成员一个年龄的计数。

+0

谢谢丹,那太好了。 – nk10 2014-08-31 23:30:35

我会这样做使用子查询或CTE。更容易遵循:

SELECT AgeInYears, COUNT(*) 
FROM (SELECT Member_ID, 
      (DATEDIFF(YY,DOB,GETDATE()) - 
       CASE WHEN DATEADD(YY,DATEDIFF(YY,DOB,GETDATE()),DOB) > GETDATE() THEN 1 
        ELSE 0 
       END) AS AgeinYears 
     FROM MEMBER 
     WHERE YEAR(registration_date) >= 2012 
    ) m 
GROUP BY AgeInYears 
ORDER BY 1; 
+0

谢谢你的回答。 – nk10 2014-08-31 23:45:43

+0

还有一个问题:我如何只选择三个最老的成员?谢谢。 – nk10 2014-09-01 00:05:48

+0

这是一个非常不同的问题。你可以在原来的查询中添加一个'top 3'和'AgeInYears desc'命令。 – 2014-09-01 01:27:46