2017-11-19 8 views
-1

入れ子になったJOINを使用しており、順序付けられた日付の列BOARDING_LAST_EDITを期待しています。ネストされたMySQL JOINは必要な列を生成しません

SELECT 

OWNER.ID AS OWNER_ID, 
OWNER.FIRST_NAME, 
OWNER.LAST_NAME, 
OWNER.EMAIL 

FROM OWNER 

LEFT JOIN (
    SELECT OWNER_ID, LAST_EDIT AS BOARDING_LAST_EDIT 
    FROM BOARDING 
    WHERE BOARDING.LAST_EDIT > '2017-01-01' 
    ORDER BY BOARDING.LAST_EDIT DESC 
) AS BOARDING_NESTED_TABLE_ORDERED 
ON OWNER.ID = BOARDING_NESTED_TABLE_ORDERED.OWNER_ID 

GROUP BY OWNER_ID 

ORDER BY BOARDING_LAST_EDIT DESC 

私はこれが返さ取得しています:

| OWNER_ID | FIRST_NAME | LAST_NAME | EMAIL |

欲しいもの: | OWNER_ID | FIRST_NAME | LAST_NAME | EMAIL | BOARDING_LAST_EDIT |

私は、ネストされた「BOARDING_LAST_EDIT AS 」が追加の列BOARDING_LAST_EDIT

にの全体のポイントを返すだろうと期待していた参加ネストされた - 結果は最初だけで、最新の日付の順にリターンをグループ化していることです。最新の日付より下の日付は削除できます。

テーブルをソートする前に参加すると、グルーピングで注文する能力が失われます。

答えて

1

これはあなたが探しているものですか?

SELECT 
    OWNER.ID AS OWNER_ID, 
    OWNER.FIRST_NAME, 
    OWNER.LAST_NAME, 
    OWNER.EMAIL, 
    BOARDING_NESTED_TABLE_ORDERED.BOARDING_LAST_EDIT 
FROM OWNER 
LEFT JOIN 
(
    SELECT 
     OWNER_ID, 
     LAST_EDIT AS BOARDING_LAST_EDIT 
    FROM BOARDING 
    WHERE BOARDING.LAST_EDIT > '2017-01-01' 
    ORDER BY BOARDING.LAST_EDIT DESC 
) BOARDING_NESTED_TABLE_ORDERED 
ON OWNER.ID = BOARDING_NESTED_TABLE_ORDERED.OWNER_ID 
GROUP BY OWNER_ID 
ORDER BY BOARDING_LAST_EDIT DESC 

私は基本的にはちょうどJOINEDデータセットを参照し、最初の選択にあなたの必要なフィールドの通過引いを追加しました。

+0

はい! - それは私が望む結果を生む。私はフィールドリストが外部宣言の一部である必要があると思った。私は単に列 'LAST_EDIT'を最後の既知の日付の順に並べ、グループ化するだけです。私はこれを行う他の方法を考えることができませんでした。あなたの声明はこれを達成するための適切な方法のように見えますか?このクエリはかなり遅いようです。 –

+1

"BOARDING_LAST_EDIT"はどのタイプのフィールドですか? OWNER_IDごとにグループ内の値のうち、最も高い値を取得するためにMAX()を使用できますか? –

+0

'タイムスタンプ' –

関連する問題