2017-07-27 16 views
0

user_fromが存在する行を、後に作成された他の行にuser_toとして選択しようとしています。各組み合わせの最初の行を選択してください

このクエリは私に行を与えます。

ただし、それぞれの組み合わせの最初の行をuser_to/user_fromにしたいとします。

など。以下のようないくつかの行がある場合:

user_to = 1, user_from = 2 
user_to = 2, user_from = 1 
user_to = 2, user_from = 1 
user_to = 1, user_from = 2 

は、私は(createdAtのように定義される)だけで最初に作成したものを取得したいです。

私はGROUP BY user_fromを試しましたが、他のすべての組み合わせはそれぞれuser_fromで除外されています。

+0

カラム値を選択するにはDISTINCTを使用してください –

答えて

0

私は以前、要件を誤解していたようです。

何の2つの「createdAt」の値がまったく同じではない、あなたはこの使用したと仮定すると:私はSELECTクエリで使用DISTINCT考える

 select a.* from 
     A a 
     where NOT EXISTS (SELECT * 
          FROM A b 
          WHERE (
           (
           (a.to_ = b.from_ AND a.from_ = b.to_) 
           OR 
           (a.to_ = b.to_ AND a.from_ = b.from_ AND a.c <> b.c) 
          ) 
         AND 
         b.c < a.c 
         ) 
        ); 
+0

この場合、AとBの両方でminを選択する必要がありますか? –

+0

OPは1つのレコードしか必要としないので、Aは十分であるはずだと思います。 – dev8080

+0

@Manolo選択句にAテーブルのcreatedAt(星、A星、またはそれを含むリスト)が含まれているとうまくいくと思います。 – dev8080

0

を。

SELECT DISTINCT A 
FROM db.table A 
LEFT JOIN db.table B 
ON A.user_to = B.user_from 
AND A.user_from = B.user_to 
AND A.createdAt < B.createdAt 
WHERE B.user_to IS NOT NULL AND B.user_from IS NOT NULL; 
関連する問題