MAX(col) を持つテーブルから行を取得したいのですが、MAX(col) は、col の値に同じデータがある場合に複数の行を返します。私は以下のように2つのテーブルを持っています:
**Table1**
row_id INTEGER (Primary key auto incremented),
name TEXT
**Table2**
row_id INTEGER (Primary key auto incremented),
ref_id INTEGER (Foreign key of Table1(row_id)),
date_in_long TEXT,
data TEXT
クエリに続いて、MAX(date_in_long) を持つ行を取得するために実行し、最後に入力された単一の行を期待しています。
SELECT DISTINCT a.name, b.row_id, b.ref_id, b.date_in_long, b.data
FROM Table1 a, Table2 b
WHERE a.row_id=b.ref_id
AND b.date_in_long =
(SELECT MAX(c.date_in_long)
FROM Table2 c
WHERE c.ref_id=a.row_id
)
date_in_long が ref_id に対して異なる値を持っている場合、出力結果は完璧ですが、値が同じである複数の行が返されます。例
Table1:
row_id name 1 aparna
2 user1 3 XYZ
Table2: row_id ref_id date_in_long data 1 1 aparna 2 の 98 データ 1 1 aparna 3 の 100 data2 1 aparna 4 の 100 data3 2 user1 の 200 data1 5 2 user1 の 300 data2 6 3 100 XYZ の data1
上記のクエリの結果:
row_id ref_id name date_in_long data
2 1 aparna 100 data2 for aparna
3 1 aparna 100 data3 for aparna
5 2 user1 300 data2 for user1
6 3 XYZ 100 data1 for XYZ
期待される結果は次のとおりです。
row_id ref_id name date_in_long data
3 1 aparna 100 data3 for aparna
5 2 user1 300 data3 for user1
6 3 XYZ 100 data1 for XYZ
上記のクエリでどのように問題が発生するか教えてください。
以下の条件を追加します(この投稿でAlexandarが提供するソリューションとして)一部の行を除外します
AND
b.row_id = (Select MAX(c.row_id) from Table2 c where c.ref_id = b.ref_id)
上記のrow_id条件を追加した後の出力:
row_id ref_id name date_in_long data
3 1 aparna 100 data3 for aparna
6 3 XYZ 100 data1 for XYZ
USER1 の行はありません。
このクエの解き方を教えてください。
よろしくお願いします、アパルナ