查询以获取其中一个具有不同值的多个列

时间:2016-06-02 18:19:56

标签: mysql sql

我有一个包含以下列的表:id,int_value,date,desc。主键是(id,int_value,date)。

我想查询表以获取id,int_value和date列,但是在desc中排序了不同的id和int_value。

例如,假设表中有以下行

id | int_value | date | desc
3       180      2015   ccc
1       160      2016   aaa
2       135      2016   ddd

根据我的疑问,我想知道:

select id, int_value, date from table t where int_value = (select
   max(int_value) from table where t.id = id) order by int_value desc;

目前,我做了以下查询:

SELECT id, MAX(int_value) AS score, date FROM table GROUP BY id order by score desc

它运行良好但是如果给定id有相同的int_value值,则同一个id将有两行。

我的问题是:你能帮我创建一个查询来避免这个问题吗?

更新

以下查询似乎完成了这项工作:

menuSubItem

感谢您的帮助。

西尔

2 个答案:

答案 0 :(得分:0)

一种方法是使用变量模拟row_number()

select id, int_value, date
from (select id, int_value, date,
             (@rn := if(@i = id, @rn + 1,
                        if@i := id, 1, 1)
                       )
             ) as rn
      from table t cross join
           (select @i := 0, @rn := 0) params
      order by id, int_value desc
     ) t
where rn = 1;

答案 1 :(得分:0)

select a.*, b.[desc] from
 (select id, max(int_value) as int_value, max(date) as date from YourTableName group by id) a 
left join  YourTableName b on (a.id=b.id and a.int_value=b.int_value and a.date=b.date)
order by date

这会产生你想要的结果:

id          int_value   date        desc
----------- ----------- ----------- ------
3           180         2015        ccc
1           160         2016        aaa
2           135         2016        ddd

(3 row(s) affected)