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で示されている 1 つのオプションは次のとおりです。

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 に答える