0

重複の可能性:
列の最大値を持つ行をフェッチします

私は2つのテーブルを持っています

1. A table USER with a USER_ID, NAME, ...
2. A table STATUS with a STATUS_ID, PEOPLE_FK (foreign key to USER_ID), LABEL, DATE_START...

ユーザーは、アクティブなステータスを1つだけ持つことができます。DATE_STARTフィールドを使用して、ユーザーのすべてのステータスの履歴を保持します。ステータスを削除することはありません。USERとSTATUSの間に結合を作成すると、すべてのユーザーにすべてのステータスを簡単に取得できます。ただし、最後のステータスのみのすべてのユーザーを取得するクエリを作成したいと思います。出来ますか ?私は何を使うのですか?

4

4 に答える 4

0

次のように参加します。

SELECT *
FROM USER   U
JOIN STATUS S ON U.USER_ID = S.USER_ID
              AND NOT EXISTS (
                SELECT 1 
                FROM   STATUS S2
                WHERE  S2.USER_ID = S.USER_ID 
                AND    S2.START_DATE > S.START_DATE
              )

これは、同じユーザーの別のステータスが存在せず、日付がより新しいステータス レコードのみを結合します。

于 2012-08-21T14:56:54.560 に答える
0
select * from 
    user a, 
    status b 
where 
      a.user_id = b.poeple_id 
  and b.start_date = (select max(start_date) 
                             from status c 
                             where c.people_id=b.people_id)
于 2012-08-21T14:59:24.980 に答える