次のMySQLテーブルについて考えてみます。
アプリケーション(すべてのユーザーによるすべてのアプリケーションが含まれています)
unique_id | user_id | date_of_application | date_ended | score | status
--------------------------------------------------------------------------------
1 user_a 2010-09-09 2010-12-24 1.2 Ended
2 user_a 2011-03-03 2011-06-06 1.3 Ended
3 user_a 2011-08-08 2011-10-10 1.0 Ended
4 user_b 2010-09-09 2010-12-24 2.2 Ended
5 user_b 2011-03-03 2011-06-06 1.5 Ended
6 user_a 2012-01-01 Active
7 user_b 2012-01-02 Active
8 user_c 2012-01-03 Active
9 user_d 2012-01-04 Active
望ましい結果:
user_id | date_of_application | score | status
------------------------------------------------------
user_a 2011-01-01 1.0 Active
user_b 2011-01-02 1.5 Active
user_c 2011-01-03 10 Active
user_d 2011-01-04 10 Active
説明する; ステータスが「アクティブ」であるすべてのレコードを選択/表示したい。さらに、初めての申請者ではないユーザー(user_aおよびuser_b)のスコアは、 「終了」ステータスの前の最新のスコア(アプリケーション表の太字部分を参照)に設定されます。一方、初めてのユーザー(user_cおよびuser_d)のスコアは10に設定されます。
注/繰り返します:
- 「終了した」アプリケーション/レコードのスコアは常に正であり、nullではないと想定します
- user_cとuser_dは初めての応募者です
- アプリケーションテーブルには、時間の経過とともに同じユーザーの複数のレコードが含まれますが、ユーザーは一度に1つの「アクティブな」アプリケーション/レコードしか持つことができません。
まず、次のようなものがあります。this(またはこれに類似したクエリ)は、スコア列にNULLまたは0の値を与えました
SELECT userid_, date_of_application, status,
score =
(
SELECT score
FROM applications
WHERE status = 'Ended' AND
date_of_application = (SELECT MAX(date_of_application)
FROM applications
WHERE status='Ended')
)
FROM applications
WHERE
status = 'Active'
ORDER BY
score ASC,
date_of_application ASC
ここで何が欠けていますか?
TIA。