【发布时间】:2017-12-18 10:39:36
【问题描述】:
假设我有一个有 4 列的表:
Col1 Col2 Col3 Col4
我的初始查询是:
SELECT Col1, Col2, Col3, Col4
FROM myTable
ORDER BY Col1, Col2, Col3 DESC, Col4
我想要的结果是所有 4 列,但是在这种情况下,当 Col1、Col2 相等时,Top N Col3 不同的行。
N=2 的示例:
表格样本数据:
Col1 Col2 Col3 Col4
---------------------
1 a 2000 s
1 a 2002 c
1 a 2001 b
2 b 1998 s
2 b 2002 c
2 b 2000 b
3 c 2000 b
1 f 1998 n
1 g 1999 e
想要的结果:
1 a 2002 c
1 a 2001 b
1 f 1998 n
1 g 1999 e
2 b 2002 c
2 b 2000 b
3 c 2000 b
另外一种描述,当(col1, col2)在多条记录中重复出现时,按照Col3降序排列,只导出这些记录的前N行。
我可以用 SQL 脚本做到这一点,而不用硬编码吗?
【问题讨论】:
-
对列使用 group by 子句,然后使用 order by col3 desc 得到我们想要的输出
-
4 个列,而不是字段。
-
group by in SQL in my question不适合,因为字段有不同的值,当按列分组时,每个值都属于自己的组,无法访问前 N Col3!
-
@jarlh:谢谢
标签: sql sql-server