0

これが私のシナリオです。

ストアドプロシージャ内で返したい3行のテーブルがあります。行は電子メール、名前、IDです。idは3または4である必要があり、一部には複数のエントリがあるため、電子メールはユーザーごとにのみ存在する必要があります。

次のようにSelectステートメントがあります

SELECT
     DISTINCT email,
     name,
     id
from table
where
     id = 3
     or id = 4

かなり単純ですが、エントリが3と4の両方であるため、2回表示されるユーザーがいます。2回表示される場合は、IDが4のユーザーのみを残します。説明が難しいので、以下に別の例を示します。

テーブル -

Email              Name    Id
jimmy@domain.com   jimmy   4
brian@domain.com   brian   4
kevin@domain.com   kevin   3
jimmy@domain.com   jimmy   3

したがって、上記のシナリオでは、IDが3のジミーを無視したいと思います。ハードコーディングせずにこれを行う方法はありますか?

ありがとう

4

4 に答える 4

2
SELECT
     email,
     name,
     max(id)
from table
where
     id in( 3, 4 )
group by email, name
于 2012-07-05T20:48:37.320 に答える
0

どのRDMSを使用していますか? これは、以下を使用して、1つの「ジミー」のみを返しRANK()ます。

SELECT A.email, A.name,A.id
FROM SO_Table A
INNER JOIN(
SELECT 
email, name,id,RANK() OVER (Partition BY name ORDER BY ID DESC) AS COUNTER
FROM SO_Table B  
) X ON X.ID = A.ID AND X.NAME = A.NAME
WHERE X.COUNTER = 1

戻り値:

 email          name    id
 ------------------------------
 jimmy@domain.com   jimmy   4
 brian@domain.com   brian   4
 kevin@domain.com   kevin   3
于 2012-07-05T21:21:53.923 に答える
0

Having Count(*) > 1重複するレコードを見つけるには、を使用すると便利な場合があります。

select * from table group by Email having count(*) > 1

また

select * from table group by Email having count(*) > 1 and id > 3.

この場合、selectfromtableで以前に提供されたソリューションはMAX(ID)適切に聞こえます。これはおそらく代替ソリューションです。

于 2012-07-05T20:55:28.543 に答える
0

これはあなたが達成したいことですか?

SELECT Email, Name, MAX(Id) FROM Table WHERE Id IN (3, 4) GROUP BY Email;
于 2012-07-05T20:49:22.330 に答える