我有一张生日和日期表,每个新的一天都会为所有生日添加新记录,年龄为(日期减去生日)。 此外,每个新日期,同一天创建新生日,年龄为0。 下表是一个例子:
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是Age = 0用户数=>的总和。 100 + 40 + 50
年龄1 - >生日2017-01-01 + 2017-01-02已经达到1岁,所以Age0Sum将是他们当天的用户量0 => 100 + 40
年龄2 - >只有一个生日日期(2017-01-01)达到2岁,所以他们的Age0Sum将只是0岁时生日那天的用户=> 100
我已经尝试了很多事情,现在尝试更多,但没有任何具体的解决办法或正确的方法。
感谢您的帮助。
答案 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;
内部选择将获得Age = 0时每个生日的用户数。 然后,与它的连接将获得达到该组年龄的所有记录,并从那时的选择中得出年龄。