1

ネストされたクエリに問題があります (どうすればよいかわかりません) PostgreSQL を使用しています

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

users
id name
1 x
2 y
3 z

call
id user_id time data
1 1 00:10 stat1
2 1 00:15 stat2
3 3 00:10 stat2
4 3 00:30 stat1
5 3 00:45 stat2
6 3 00:50 stat3

私が取得する必要があるのは、選択したユーザーですが、最後の呼び出しが stat2 の場合のみです。私が抱えている問題は、最新のデータのみをチェックする方法がわからないことです。

私のクエリ:

SELECT users.*, call.* FROM users, call WHERE users.id=call.user_id AND call.id IN (SELECT id FROM call WHERE call.data='stat2') ORDER BY users.id

私がそれで得るものは次のとおりです:

users
id name id user_id time data
1 x 2 1 00:15 stat2
3 z 3 3 00:10 stat2
3 z 5 3 00:45 stat2

私が取得する必要があるのは次のとおりです。

users
id name id user_id time data
1 x 1 1 00:15 stat2

最後の値が統計 3 であるため、3 は表示されません (統計が 2 つあるため、明らかに 2 倍になるべきではありません。

複数のクエリで実行できますが、1 つのクエリで実行したいです。

ありがとう

4

2 に答える 2

2

したがって、それぞれの最後の通話 IDを取得する必要がありますUsers.id。group by でそれを行います。次に、最後の通話 ID を取得したら、その最後の通話 ID のステータスが であるかどうかを確認しますstat2

クエリは次のようになります。

SELECT *
FROM USERS U
INNER JOIN
  (SELECT user_id, MAX(id) AS last_id
   FROM Calls c
   GROUP BY user_id
  ) t0
ON t0.user_id = u.id
INNER JOIN Calls c ON c.id = t0.last_id
WHERE c.type = 'stat2'

フィドルの例: http://www.sqlfiddle.com/#!1/7016e/5

于 2013-06-04T17:43:16.693 に答える