匹配不同的行值的差异我有它具有以下的表:SQL - 设置列值由共同的ID
// zip // date_qtr // vac_ratio // vac_change //
100 12_2016 0.56 NULL
101 12_2016 0.44 NULL
100 9_2016 0.38 NULL
. . .
. . .
101 9_2016 0.12 NULL
我想找到vac_ratio的变化(对前几个季度vac_ratio)为每个邮编的每个季度。 所以基本上于与date_qtr => 12_2016
vac_change(新列)=表中的每一行(vac_ratio(12_2016和zip = Z1) - vac_ratio(9_2016和zip = Z1))/ vac_ratio(9_2016和拉链= z1)
我能够使用JOIN获得vac_change值,但我发现很难更新列vac_change。
UPDATE h0 SET h0.vac_change= a0.vac_change FROM hud_vacancies h0 JOIN
(SELECT h1.zip,h1.date_qtr,((h1.vac_ratio - h2.vac_ratio)/h2.vac_ratio) AS vac_change
FROM hud_vacancies h1 JOIN hud_vacancies h2 ON h1.zip = h2.zip
WHERE h1.date_qtr LIKE '12_2016' and h2.zip LIKE '9_2016')a0 ON h0.zip = a0.zip WHERE h0.date_qtr LIKE '12_2016'
我得到一个SQL语法错误,但我不明白是什么问题。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM hud_vacancies h0 JOIN (SELECT h1.zip,h1.date_qtr,((h1.vac_ratio - h2.vac_r' at line 1
我根据我的sql脚本类似于为here的解决方案。 我希望问题清楚,如果需要更多信息,请告诉我。
编辑: 根据@Gordon给出的输入,我尝试了一个没有FROM操作符的脚本变体。它现在不会给我一个语法错误,但它也不会设置列。列仍然是NULL,并且没有行受到影响。这是修改后的代码。
UPDATE hud_vacancies h0
JOIN
(SELECT h1.zip
, h1.date_qtr
, ((h1.vac_ratio - h2.vac_ratio)/h2.vac_ratio) vac_change
FROM hud_vacancies h1
JOIN hud_vacancies h2
ON h1.zip = h2.zip
WHERE h1.date_qtr LIKE '12_2016'
and h2.zip LIKE '9_2016'
) a0
ON h0.zip = a0.zip
SET h0.vac_change = a0.vac_change
WHERE h0.date_qtr LIKE '12_2016'
PS:我很抱歉,因为我知道标题中提到的区别,而我试图计算的变化率,但我试图保持一个通用的标题并没有在执行差异计算的一个小的差异和变化率。
MySQL不支持'UPDATE'语句中的'FROM'子句。 –
请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry
您使用了'SQL Server'语法。我想在'MySQL'中,你在'SET'之前加入'JOIN'。 – Eric