2015-02-05 41 views
0

我有一个SQL查询(sqlight3),它给了我tripels(名称,值,日期)的数据。sql multiple colums

select name, value, date from 
"different things and conditions" 
order by date desc 

按日期IST排序,看起来像这样的结果:

name | value | date 
------------------- 
a | x  | 2015 
b | y  | 2014 
a | z  | 2013 
b | x  | 2012 
c | y  | 2011 

现在我想要的结果过滤,让每一个名字是独一无二的,我只得到最新的(按日期)的三倍。我期待结果

name | value | date 
------------------- 
a | x  | 2015 
b | y  | 2014 
c | y  | 2011 

我该如何实现这一目标?

+0

请用您正在使用的数据库标记您的问题。 – 2015-02-05 12:45:31

+0

用mysql关起来,谢谢。 – Kaligule 2015-02-05 12:50:59

+0

注意到这是错的,抱歉。意思是sqlight3。 – Kaligule 2015-02-05 13:12:06

回答

0

大多数数据库支持ANSI标准的窗口功能,所以这可以使用row_number()做到:

select name, value, date 
from (select t.*, 
      row_number() over (partition by name order by date desc) as seqnum 
     from . . . 
    ) t 
where seqnum = 1; 

编辑:

MySQL不支持row_number()。这里是另一种方法:

select name, 
     substring_index(group_concat(value order by date desc), ',', 1) as value 
     max(date) as date 
from . . . 
group by name; 
+0

看起来像mysql3不支持“row_number()”和“parition”,对不起。 – Kaligule 2015-02-05 13:03:56

+0

我很抱歉问,但是你碰巧也知道sqlight3的东西吗? Substring_index在那里不存在。 – Kaligule 2015-02-05 13:43:48