【发布时间】:2012-01-21 15:04:39
【问题描述】:
给定一个表 (daily_sales),其中包含 100k 行以下数据/列:
id rep sales date
1 a 123 12/15/2011
2 b 153 12/15/2011
3 a 11 12/14/2011
4 a 300 12/13/2011
5 a 120 12/12/2011
6 b 161 11/15/2011
7 a 3 11/14/2011
8 c 13 11/14/2011
9 c 44 11/13/2011
编写报告(完全在 SQL 中)显示每个名称的两个最新条目(rep、sales、date)的最有效方法是什么,因此输出将是:
a 123 12/15/2011
a 11 12/14/2011
b 153 12/15/2011
b 161 11/15/2011
c 13 11/14/2011
c 44 11/13/2011
谢谢!
【问题讨论】:
-
我希望看到所有使用标准 SQL 或特定于供应商的答案,但可以说 mysql(如果可以的话,我也会将其作为标签添加到问题中)
-
如果“名称”只有一个条目怎么办?
-
你桌子上的主键是什么?我的第一个想法是使用 2 个查询之间的联合,一个选择最大值(直接向前)并将其联合到具有第二个最近日期的第二个查询。其次是更复杂的一点,您可以选择最大 trans_date 不在第一个查询中的 ID 列表中...这就是为什么我需要一个 ID 列
-
@daryn 当然,但“最有效”的解决方案将取决于可用的工具。
-
@Tewlfth 这绝对是一种方法。随意假设一个主键列“id”(我将编辑问题)。
标签: mysql sql postgresql greatest-n-per-group