2017-03-27 97 views
0

我有一张生日和一天的表,每个新的一天都会为所有的生日添加一个新的记录,并且年龄是(日期减去生日)。 此外,每一个新的日期,一个新的生日与同日创建的,年龄为0 下表是一个例子:mysql的字段值,根据其他字段的限制

Age | BirthDay  | Date   | Users 
--------------------------------------------- 
0 | 2017-01-01 | 2017-01-01 | 100 
1 | 2017-01-01 | 2017-01-02 | 70 
2 | 2017-01-01 | 2017-01-03 | 50 
0 | 2017-01-02 | 2017-01-02 | 40 
1 | 2017-01-02 | 2017-01-03 | 10 
0 | 2017-01-03 | 2017-01-03 | 50 

现在,我想知道用户的年龄在总和每个生日到达该日期为0,按年龄分组。

结果:

Age | Age0Sum 
-------------- 
0 | 190 
1 | 140 
2 | 100 

说明:

  • 年龄0 - >所有生日具有值在它们的第0天,所以Age0Sum是年龄= 0的用户数量的总和=> 100 + 40 + 50

  • 年龄1 - >生日2017-01-01 + 2017-01-02已达到1岁,因此Age0Sum将是他们在第0天的日用户数量=> 100 + 40

  • 年龄2 - (2017年1月1日)达到2年龄>只有一个生日日期,所以他们的Age0Sum将只从生日0 => 100

I”的用户在年龄已经尝试了很多东西,现在尝试更多,但没有找到具体的解决方案或正确的方法。

感谢您的帮助。

+0

我不明白所应用的逻辑。这似乎与表中的最低日期或最低生日或最高日期或最高生日有关。正确?如果是这样? –

回答

0

可以说表名是UsersTable。

SELECT 
    u1.Age, 
    SUM(u2.Users) 
FROM 
    UsersTable AS ut1 
     JOIN 
    (SELECT 
     BirthDay, Users 
    FROM 
     UsersTable 
    WHERE 
     Age = 0) AS ut2 ON ut1.BirthDay = ut2.BirthDay 
GROUP BY Age 
ORDER BY Age; 

内选择会得到用户的数量在年龄= 0 每个生日之后,它的加入会得到谁达到这个年龄组的所有记录,并从透水选择总结有年龄。