分发结果的SQL排序

时间:2012-12-03 22:29:13

标签: sql ruby-on-rails postgresql analytic-functions

给出这样的产品表:

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

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;