7

私は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

4

4 に答える 4

0

2 つの仮定:

  1. これをアップデートに変える方法を見つけ出すことができます。
  2. PK は (id,mo_date) に存在します

次に、これを行うことができます-

SELECT p_id
     , SUM(degrees) ttl
  FROM 
     ( SELECT x.*
         FROM overw x 
         JOIN overw y 
           ON y.p_id = x.p_id 
          AND y.mo_date >= x.mo_date 
        GROUP 
           BY p_id
            , mo_date HAVING COUNT(*) <= 3
     ) a 
 GROUP 
    BY p_id;
于 2013-10-15T16:51:09.640 に答える
0

多分私は遅いかもしれませんが、今のところサービスを無視しましょう。以下の各行の正しい結果と動作を表示できますか...

+------+---------+------------+--------+
| p_id | degrees | mo_date    | result |
+------+---------+------------+--------+
|    5 |    6.20 | 2013-06-10 |      ? | 
|    5 |    5.45 | 2013-08-11 |      ? |
|    5 |   10.20 | 2013-10-09 |  21.85 | <- = 10.2+5.45+6.2 = 21.85 
|    8 |   14.75 | 2013-04-25 |      ? |
|    5 |    9.85 | 2013-03-10 |      ? |
|    8 |   11.00 | 2013-02-22 |      ? |  
+------+---------+------------+--------+
于 2013-10-16T14:55:41.807 に答える