2

给定这样的产品表:

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
4

1 回答 1

2

此 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;
于 2012-12-03T22:52:56.600 回答