2016-11-26 34 views
-1

我有这样计数年龄具有明显在MySQL

PersonID Gender Age CreatedDate 
================================ 
1   M  32 10/09/2011 
2   F  33 10/09/2011 
2   F  33 10/11/2011 
1   M  32 10/11/2011 
3   F  33 10/11/2011 

我想找到性别的创建日期计数按年龄组有一个表,年龄范围为30-34和获取的人是明显。

所需的输出应该是这样的:

Gender AgeRange CreatedDate CountResult 
================================ 
M  30_34 10/09/2011 1 
F  30_34 10/09/2011 1 
F  30_34 10/11/2011 1 

所以,我想这一点,但couldtn帮助:

SELECT t.Gender,'30_34' AS AgeRange,t.CreatedDate, 
     SUM(CASE WHEN t.Age BETWEEN 30 AND 34 THEN 1 ELSE 0 END) AS CountResult, 
FROM (
SELECT DISTINCT PersonID,Gender,Age,CreatedDate 
FROM MyTable 
GROUP PersonID,Gender,Age,CreatedDate 
HAVING COUNT(PersonID)=1 
) t 

我能为解决做什么?

感谢

+0

你存储的年龄吗?这些人是否已经死亡? – Strawberry

+0

让我们面对现实;这是一个糟糕的例子。 – Strawberry

回答

0

如果你想如果存在mytable的每PERSONID这个最早的创建日期可能会做 DROP TABLE;

create table mytable(PersonID int, Gender varchar(1),Age int, CreatedDate date); 
insert into mytable values 
(1 ,  'M',  32 , '2011-09-10'), 
(2 ,  'F',  33 , '2011-09-10'), 
(2 ,  'F',  33 , '2011-11-10'), 
(1 ,  'M',  32 , '2011-11-10'), 
(3 ,  'F',  33 , '2011-11-10'); 


select mt.gender, 

     mt.createddate, 
     sum(case when mt.age between 32 and 34 then 1 else 0 end) as Age32to34 

from mytable mt 
where createddate = (select min(mt1.createddate) from mytable mt1 where mt1.personid = mt.personid) 
group by gender,mt.createddate 
0

你似乎想:​​

SELECT t.Gender, '30_34' AS AgeRange, t.CreatedDate, 
     COUNT(DISTINCT t.PersonId) AS CountResult 
FROM MyTable 
WHERE t.Age BETWEEN 30 AND 34 
GROUP BY t.Gender, t.CreatedDate; 
+1

从哪里来? – kodcu

+0

另外我用sum只用一个sql查询原因得到其他年龄范围0_4,5_9,10_14等。 – kodcu

+0

@kodcu。 。 。只能回答你提出的问题。你应该问*另一个问题,如果你想要更多的年龄段 - 这一个很清楚,已经有答案。如果你改变了这个问题,你可能会使可以画下来的答案失效。 –

0

如何:

SELECT 
    Gender 
    , '30_34' AS AgeRange 
    , CreatedDate 
    , COUNT(*) AS CountResult 
FROM MyTable A 
JOIN (
    SELECT PersonID, MIN(CreatedDate) MinCreatedDate 
    FROM MyTable GROUP BY PersonID 
) B ON B.PersonID = A.PersonID AND B.MinCreatedDate = A.CreatedDate 
WHERE Age BETWEEN 30 AND 34 
GROUP BY Gender, CreatedDate 
ORDER BY CreatedDate, Gender DESC