【发布时间】:2010-10-18 00:48:43
【问题描述】:
说,我在数据库(SQL Server 2008)中有一个表,其中的数据与此类似 (但要大得多):
| ID | SCORE | GROUP |
-----------------------
| 10 | 1 | A |
| 6 | 2 | A |
| 3 | 3 | A |
|----|-------|-------|
| 8 | 5 | B |
|----|-------|-------|
| 4 | 1 | C |
| 9 | 3 | C |
| 2 | 4 | C |
| 7 | 4 | C |
|----|-------|-------|
| 12 | 3 | D |
| 1 | 3 | D |
| 11 | 4 | D |
| 5 | 6 | D |
我想获取每个GROUP 的顶部和底部记录的ID,其中每个组的记录按SCORE 排序(以及补充,ID),如下所示:
| GROUP | MIN_ID | MAX_ID |
----------------------------
| A | 10 | 3 |
| B | 8 | 8 |
| C | 4 | 7 |
| D | 1 | 5 |
问题是:我怎样才能做到这一点?
到目前为止,我一直在尝试基于 RANK() 函数的解决方案,但还没有找到一个既能产生正确输出又具有模糊效率或可维护性的查询。
注意事项:
这个例子被简化了。我的“表”实际上是一个已经很复杂的查询的输出,我希望将最后阶段添加到该查询中。我宁愿只从表格中选择一次。
如果可能,最好有一个通用的解决方案,让我可以选择每个组的顶部和底部 n 值。
IDs 的顺序不方便。
【问题讨论】:
-
您是否也想要分数,或者只是让输出按分数排序?
-
前 1 名还是前 n 名?大不同...
-
@j_random_hacker:我不在乎分数。
-
@gbn:是的,我知道。我会对前 1 名感到满意。
-
@A J Lane:如果你不关心分数,你最好把它们排除在画面之外。查看答案,您的问题会以不同的方式解释。
标签: sql sql-server-2008