我在一个项目上工作,现在我处于盲点,试图解决这个问题。
我有一些名为 x_world 的MySQL表,其中包含一些列。这是一个例子:
internalid name population date
1 John 100 2014-05-01
2 Tommy 250 2014-05-01
3 Paul 200 2014-05-01
4 Holly 700 2014-05-01
5 John 100 2014-05-02
6 Tommy 240 2014-05-02
7 Paul 201 2014-05-02
8 Holly 680 2014-05-02
9 John 100 2014-05-03
10 Tommy 230 2014-05-03
11 Paul 202 2014-05-03
12 Holly 799 2014-05-03
我需要的是得到这个结果:
name population (+-1d) (+-3d)
John 100 0 0
Tommy 230 -10 -20
Paul 202 +1 +2
这是关于我的意思和需要的解释:
另外:
我是PHP和MySQL的初学者。我对两者的基本知识都很熟悉,但MySQL部分对我来说看起来很疯狂:(我很感激每一个帮助。最后,抱歉我的英语不好。我尽我所能:)。
答案 0 :(得分:1)
SELECT cur.name, cur.population,
cur.population-d1.population AS `+-1d`, cur.population-d3.population AS `+-3d`
FROM (
SELECT name, MAX(date) AS curdate
FROM x_world
GROUP BY name) AS maxes
JOIN x_world AS cur ON cur.name = maxes.name AND cur.date = maxes.curdate
JOIN x_world AS d1 ON d1.name = maxes.name AND d1.date = DATE_SUB(maxes.curdate, INTERVAL 1 DAY)
JOIN x_world AS d3 ON d3.name = maxes.name AND d3.date = DATE_SUB(maxes.curdate, INTERVAL 2 DAY)
HAVING `+-1d` <= 2 AND `+-3d` <= 2
请注意,虽然您将其称为+-3d
,但实际上在2014-05-01和2014-05-03之间只有2天。我保留了您的命名,但在计算中使用了INTERVAL 2 DAY
。