我有一个包含以下列的表: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
感谢您的帮助。
西尔
答案 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)