0

タスクと支払いとの多対 1 の関係を持つ重複した user_ids を持つテーブルがありました。

タスクのグループごとの最大値を使用して、タスクの完了率が最も高い行を返しました。ただし、同じテーブルの最高の支払い完了統計でこの新しいテーブルを更新したいと思います。

例えば:

id    date                 taskid  payid  task_completion  pay_value
4722  2007-11-08 16:20:14  2       3      7.14             0
4722  2007-11-08 16:20:14  3       3      0.00             0
4722  2007-11-08 16:20:14  5       3      0.00             0
4722  2007-11-08 16:20:14  2       6      7.14             40
4722  2007-11-08 16:20:14  3       6      0.00             40
4722  2007-11-08 16:20:14  5       6      0.00             40
4724  2007-11-20 15:32:40  4       7      25.71            105
4726  2008-01-28 11:44:50  7       8      7.14             52
4726  2008-01-28 11:44:50  8       8      34.29            52
4726  2008-01-28 11:44:50  10      8      65.71            52
4726  2008-01-28 11:44:50  7       9      7.14             24
4726  2008-01-28 11:44:50  8       9      34.29            24

したがって、次のように、タスクの完了時にグループごとの最大値を使用して、新しいテーブル (一意の ID を持つ) を作成しました。

id    date                 taskid  payid  task_completion  pay_value
4722  2007-11-08 16:20:14  2       3      7.14             0
4724  2007-11-20 15:32:40  4       7      25.71            105
4726  2008-01-28 11:44:50  10      8      65.71            52

問題は、id 4722 の場合、最高の pay_value と payid が結果のテーブルに挿入されていないことです。

これをフォームで更新したいと思います(この選択を使用):

SELECT 
    s1.payid,
    s1.pay_value,
FROM
    f_tbl s1
        LEFT JOIN
    f_tbl s2 ON s1.cashid = s2.cashid
        AND s1.pay_value > s2.pay_value
WHERE
    s2.cash_id IS NULL
GROUP BY user_id;

ただし、このクエリに基づいて最終テーブルを更新することはできないようです。私は困惑しています、あなたの助けに感謝します。

4

1 に答える 1

0

joinこれを行うにはが必要ですupdate。クエリが正しいと仮定します。

update SummaryTable st cross join
       (SELECT s1.payid, s1.pay_value,
        FROM f_tbl s1 LEFT JOIN
             f_tbl s2
             ON s1.cashid = s2.cashid AND s1.pay_value > s2.pay_value
        WHERE s2.cash_id IS NULL
        GROUP BY user_id
       ) toupdate
    set st.payid = toupdate.payid,
        st.pay_value = toupdate.pay_value
    where st.taskid = 4722;
于 2013-08-13T10:51:38.910 に答える