给定这样的产品表:
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
此 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;