【发布时间】:2012-12-03 22:29:12
【问题描述】:
给定一张这样的产品表:
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
【问题讨论】:
-
@Ben 我正在使用 Postgres。谢谢。
-
下一个问题:-)。假设您为卖家 3 添加了四行,ID 为 6-9,日期与您的顺序相同。现在的订单是 1, 3, 5, 2, 4, 6, 7, 8, 9,即当少数卖家的商品比其他人多得多时,尾端会发生什么。
-
是的,您的顺序正确。在这种情况下,卖家 3 最旧的产品将被排序到结果集的末尾。
-
只是想知道如果卖家长时间不更新他们的产品会发生什么。在您的第二个示例中,假设卖家 5 上次更新他们的产品是在 2011 年 12 月 1 日。那还应该排在产品 2 和 4 之上吗?
-
@kburkhardt 抱歉,我的数字弄错了。如果卖家 5 最后一次更新他们的产品是在 2011 年 12 月 1 日,那么答案应该是 4、2、5、3、1 吗?如果是这样,我认为这就是贾斯汀凯夫的答案会给你的。
标签: sql ruby-on-rails postgresql analytic-functions