我有 2 张桌子,SVISE
并且OVERW
在里面OVERW
,我有一些带有人员 ID 和分数日期的分数。例如
p_id degrees mo_date
5 10.2 2013-10-09
5 9.85 2013-03-10
8 14.75 2013-04-25
8 11.00 2013-02-22
5 5.45 2013-08-11
5 6.2 2013-06-10
SVISE.ofh
字段必须使用最后三个记录的总和进行更新
(对于特定的人,按日期降序排序),因此对于 id 5 的人,总和将来自行
5 10.2 2013-10-09
5 5.45 2013-08-11
5 6.2 2013-06-10
总和=21.85。
上所需的最终结果,基于SVISE
上述值:
HID OFH START
5 21.85 October, 16 2013 ##(10.2 + 5.45 + 6.2)
5 21.5 September, 07 2013 ##(5.45 + 6.2 + 9.85)
5 0 March, 05 2013 ##(no rows)
8 25.75 October, 14 2013 ##(14.75 + 11)
3 0 October, 14 2013 ##(no rows)
5 0 March, 05 2012 ##(no rows)
OFH
最初为 0
我可以获得特定人的总和,但我不能使用限制来获取最后 3 行。它被忽略。
这是我用来检索给定日期每人所有学位总和的查询:
UPDATE SVISE SV
SET
SV.ofh=(SELECT sum(degrees) FROM OVERW WHERE p_id =SV.hid
AND date(mo_date)<date(SV.start)
AND year(mo_date)=year(SV.start))
我不能只使用 sum 的 limit:
UPDATE SVISE SV
SET
SV.ofh=(SELECT sum(degrees) FROM OVERW WHERE p_id =SV.hid
AND date(mo_date)<date(SV.start)
AND year(mo_date)=year(SV.start)
ORDER BY mo_date DESC
LIMIT 3)
这不起作用。
我已经尝试过multi-table updates
和 withnested queries
来实现这一目标。每个场景都有已知的限制,阻止我完成预期的结果。
- 嵌套查询看不到父表。
Unknown column 'SV.hid'in 'where clause'
- 多表更新不能与限制一起使用。
Incorrect usage of UPDATE and LIMIT
任何解决方案都可以。无需在单个查询中执行此操作。如果有人想尝试使用中间表。
SQL fiddle也可用。
在此先感谢您的帮助。
- 更新 -
这是 Akash 的解决方案:http ://sqlfiddle.com/#!2/4cf1a/1