私は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
フィールドは、最後の 3 つのレコードの合計で更新する必要があります
(特定の個人の場合、日付の降順で並べ替えます)。したがって、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だった
特定の人の合計を取得できますが、 limit を使用して最後の 3 行を取得することはできません。無視されます。
これは、特定の日付の1 人あたりのすべての学位の合計を取得するために使用するクエリです。
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))
合計で制限を使用することはできません:
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
私はこれをnested queries
達成するために何度も試しました。すべてのシナリオには、望ましい結果を達成するのを妨げる既知の制限があります。
- ネストされたクエリは、親テーブルを見ることができません。
Unknown column 'SV.hid'in 'where clause'
- 複数テーブルの更新は制限付きで使用できません。
Incorrect usage of UPDATE and LIMIT
どんな解決策でも構いません。単一のクエリで行う必要はありません。中台でもやってみたい方はどうぞ。
SQL フィドルも利用できます。
よろしくお願いします。
- アップデート -
Akash のソリューションは次のとおりです。http://sqlfiddle.com/#!2/4cf1a/1