2016-12-09 47 views
-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

它似乎是要保留每个不同的名称,最早出现。一种选择使用子查询:

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

注意该解决方案将返回每名组以上的记录应该有两个记录具有最小日期领带。但样本数据似乎并不意味着会发生这种情况。

+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

是的,我同意你对这个数据集可能行,但总的来说这可能是一个问题。要修复它,您可以先使用子查询来查找最小ID,然后再回到原始表。 –

1

看起来你正在寻找每个名字的最早日期。这个查询将实现。它将按名称对其进行分组并给出该名称的最短日期。

SELECT Name,MIN(Date) FROM table_1 GROUP BY Name