给出这样的产品表:
ID Name Seller ID Updated at
-- ---- --------- ----------
1 First 3 2012-01-01 12:00:10
2 Second 3 2012-01-01 12:00:09
3 Third 4 2012-01-01 12:00:08
4 Fourth 4 2012-01-01 12:00:07
5 Fifth 5 2012-01-01 12:00:06
我想构建一个查询来对这些产品进行排序:
ID
---
1
3
5
2
4
换句话说,查询应显示最近更新的产品,由卖方分发,以最大限度地减少来自同一卖家的连续产品序列的可能性。
有关如何最好地完成此任务的任何想法? (请注意,此应用程序的代码是Ruby,但如果可能的话,我想在纯SQL中执行此操作)。
编辑:
请注意,查询也应该处理这种情况:
ID Name Seller ID Updated at
-- ---- --------- ----------
1 First 3 2012-01-01 12:00:06
2 Second 3 2012-01-01 12:00:07
3 Third 4 2012-01-01 12:00:08
4 Fourth 4 2012-01-01 12:00:09
5 Fifth 5 2012-01-01 12:00:10
产生以下结果:
ID
---
5
4
2
3
1
答案 0 :(得分:2)
this sqlfiddle中展示的一个选项是
select subq.*
from (
select rank() over (partition by seller_id order by updated_at desc) rnk,
p.*
from products p) subq
order by rnk, updated_at desc;