2016-12-09 15 views
-2

名前、日付の区別が一意に2つの列が必要です。 例テーブルからユニークな列の値を取得する

table_1 
_________________ 
ID Name Date 
1 a 12-02-2016 
2 b 12-02-2016 
3 c 13-02-2016 
4 a 14-02-2016 
5 c 14-02-2016 
6 a 15-02-2016 
7 b 16-02-2016 
8 e 17-02-2016 

私は次のように出力

ID Name Date 
1 a 12-02-2016 
3 c 13-02-2016 
7 b 16-02-2016 
8 e 17-02-2016 

Plsのをしたい、私は、クエリ
は、私は次のクエリを試みたが、

  1. SELECT DISTINCT a,name,date FROM table_1
  2. を働いていないしたい私を助けてselect id,name, date from table_1 group by id,name
+3

mysql oracle? – Jens

+0

(9、d、12-02-2016)の余分な行があった場合はどうなりますか?それでは、あなたは何を期待していますか? – Boneist

+0

しばらくお待ちください。 –

答えて

2

最も早く発生する個々の名前を保持するように見えます。 1つのオプションでサブクエリが使用されます。

SELECT ID, Name, Date 
FROM yourTable t1 
WHERE Date = (SELECT MIN(Date) FROM yourTable t2 WHERE t2.Name = t1.Name) 

最小の日付を持つ2つのレコードの結合がある場合、このソリューションは名前グループごとに複数のレコードを返します。しかし、サンプルデータはこれが起こることを暗示していないようです。

+0

返品ID 1,2,3,8希望しない1,3,7,8 http://sqlfiddle.com/#!9/00b27/6 –

+1

@AnkitAgrawal '1,3,7,8 'が欲しい...これは明らかではない。 –

+0

与えられた上の質問 –

2

これはあなたが欲しいですか?

select min(id),name, min(date) from table_1 group by name 
+3

しかし、最小IDと特定の名前グループの最小日付が一致しない場合はどうなりますか? –

+0

しかし、与えられたサンプルでは、​​日付は昇順になっています。 – Sankar

+1

はい、私はあなたがおそらくこのデータセットでOKだということに同意しますが、一般的に問題になる可能性があります。これを修正するには、最初にサブクエリを使用して最小IDを見つけて元のテーブルに戻すことができます。 –

1

各名前の最古の日付を探しているようです。このクエリはこれを達成します。名前でグループ化し、その名前の最小日付を指定します。

SELECT Name,MIN(Date) FROM table_1 GROUP BY Name 
関連する問題