내 SQL을 구조화하는 더 좋은 방법은 무엇입니까?SQL 중첩 쿼리 MAX (날짜)
각 클라이언트에 대해 가장 최근의 이벤트를 선택하고 싶습니다. 이벤트는 where 절로 필터링됩니다. 클라이언트가 where 절을 만족시키는 이벤트가 없다면, 나는 또한 주목하고 싶다.
EVENT_DATE EVENT_STAFF EVENT_TYPE
1/1/2013 Myley_Cyrus Music_Awards
3/1/1947 Albert_Einstein Noble_Prize
현재, 나는이 일을하고있다 : 1. 클라이언트 ID를. 2. 해당 클라이언트에 대한 모든 이벤트를 선택하십시오. 2b. 이러한 이벤트를 필터링하십시오. 3. 가장 최근의 필터링 된 이벤트를 선택하거나 'X'를보고하십시오 (기준을 충족시키는 이벤트 없음).
문제는 MAX (e_date)가 가장 최근의 이벤트 (각 e_staff/e_type 콤보에 대해 하나의 행)가 아닌 여러 행을 반환한다는 것입니다.
/* STEP #3: SELECT MOST RECENT FILTERED EVENT FOR EACH CLIENT */
SELECT MAX(e_date), e_staff, e_type
FROM client INNER JOIN events ON events.e_case_no = client.c_id
WHERE events.id IN (
/* STEP #2: SELECT FILTERED EVENTS FOR THOSE CLIENTS */
SELECT events.id
FROM events INNER JOIN client ON e_case_no = c_id
WHERE client.c_id IN (
/* STEP #1: SELECT CLIENTS */
SELECT client.c_id
...
/* STEP #1 END */
)
AND ... --FILTER THE EVENTS
/* STEP #2 END */
)
GROUP BY e_staff, e_type
/* STEP #3 END */
Thank you !.