在MySQL中明显地计算年龄

时间:2016-11-26 13:23:57

标签: mysql sql

我有一张这样的表

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

所以我尝试了这个但是无法帮助:

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

我可以为解决方案做些什么?

由于

3 个答案:

答案 0 :(得分: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 :(得分:0)

如果您想要每个人最早创建的日期,可能会这样做 drop table如果存在mytable;

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

答案 2 :(得分: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