【发布时间】:2026-02-07 05:10:02
【问题描述】:
这是我的数据表:
-----------------------------
| date | value | id |
|03/05/18 |5 | 1 |
|03/05/18 |3 | 2 |
|03/05/18 |5 | 3 |
|03/05/18 |6 | 4 |
|03/05/18 |9 | 5 |
|08/03/19 |5 | 6 |
|08/03/19 |3 | 7 |
|08/03/19 |1 | 8 |
|08/03/19 |6 | 9 |
|01/06/20 |7 | 10 |
|01/06/20 |0 | 11 |
|01/06/20 |2 | 12 |
-----------------------------
我需要在每个date中找到最大的value,并输出对应的id。 示例:
-----------------------------
| date | value | id |
|03/05/18 |9 | 5 |
|08/03/19 |6 | 9 |
|01/06/20 |7 | 10 |
-----------------------------
现在我知道如何在每个 date 中输出最大 value,但 没有 对应的 id。 示例:
----------------------
| date | value |
|03/05/18 |9 |
|08/03/19 |6 |
|01/06/20 |7 |
----------------------
我使用的软件是 MS SQL Server 2012。
我的代码:
SELECT
date,
MIN(value)
FROM
my_table
GROUP BY date
我尝试了 SQL Server 函数“FIRST_VALUE”,但没有帮助。
我还尝试在子查询中创建比较条件,但在子查询内外指定变量(别名)时遇到了一些问题。
有什么想法吗?
【问题讨论】:
-
在 CTE 中计算
row_number() over (partition by date order by value desc) as rn,然后过滤rn = 1 -
@dnoeth,谢谢!我做到了:)
标签: sql sql-server sql-server-2008 sql-server-2012 greatest-n-per-group