2017-07-25 10 views
0

複数の同じエントリを持つテーブルがあり、それぞれの最初のテーブルだけを表示したいとします。mysqlの同じエントリに対して1行だけを表示する

userid | event 
1   01-01-2017 
2   09-12-2016 
2   05-06-2017 
2   09-12-2016 
3   10-03-2017 
... 

とあなただけの1つの日付(ユーザーあたり例えば、最小1)表示したい:

userid | event 
1   01-01-2017 
2   09-12-2016 
3   10-03-2017 
    .... 

通常、私は、サブクエリをしようとするだろう:

SELECT userid, event FROM table as A 
WHERE event=(SELECT min(event) FROM table as B WHERE A.userid = B.userid) 

が、MySQLで、このディスプレイをそのユーザーは2つの同一の最小日付を持つため、userid = 2の2行。

行のうちの1つだけに?あなたのSELECTDISTINCTの追加について

+0

単純な 'group by'で十分です。 –

+0

最初に日付を日付として保存します。次へ:RDBMSのテーブルにはPRIMARY KEYSが必要です。それ以外の場合はテーブルではありません。 – Strawberry

答えて

1
SELECT userid, event 
FROM YourTable t 
WHERE NOT EXISTS (
    SELECT * FROM YourTable t WHERE t.userid = userid AND event > t.event 
) 

OR

SELECT a.id, a.rev, a.contents 
    FROM (SELECT userid, Event, 
       ROW_NUMBER() OVER (PARTITION BY Event ORDER BY userid DESC) rank 
      FROM YourTable) a 
WHERE a.rank = 1 
1

どのように?

+0

両方とも、間違いなくDISTINCTが動作します。私は(SQL ServerのTOPとは対照的に)LIMITを試していて、複数のエントリを取得していました。 – user3310782

関連する問題