Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关于多重分组的问题。如何从组中获取一行?_Sql_Sql Server_Sql Server 2008_Sql Server 2012_Greatest N Per Group - Fatal编程技术网

Sql 关于多重分组的问题。如何从组中获取一行?

Sql 关于多重分组的问题。如何从组中获取一行?,sql,sql-server,sql-server-2008,sql-server-2012,greatest-n-per-group,Sql,Sql Server,Sql Server 2008,Sql Server 2012,Greatest N Per Group,这是一个包含我的数据的表: ----------------------------- | 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

这是一个包含我的数据的表:

-----------------------------
|   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   |
-----------------------------
我需要在每个日期中找到最大,并将其与相应的id一起输出。 例如:

现在我知道了如何在每个日期中输出最大,但没有相应的id。 例如:


我使用的软件是MS SQL Server 2012。 我的代码:

    SELECT 
    date,
    MIN(value)
    
    FROM 
    my_table
    
    GROUP BY date
我尝试了SQL Server函数“第一个值”,但没有任何帮助

我还试图在子查询中创建比较条件,但在子查询内外指定变量(别名)时遇到了一些问题


有什么想法吗?

您可以使用子查询进行筛选:

select t.*
from mytable t
where t.value = (select max(t1.value) from mytable t1 where t1.date = t.date)
如果有的话,这将允许顶部系带。另一个选项是使用窗口功能:

select *
from (
    select t.*, rank() over(partition by date order by value desc) rn
    from mytable t
) t
where rn = 1

如果你想打破僵局,你可以使用
行数()
而不是
秩()
——但是为了得到稳定的结果,你需要在
order by
子句中增加第二列。

在CTE中将
行数()计算为rn
,然后过滤
rn=1
@dnoeth,谢谢我做到了:)谢谢你的回答!我两种方法都试过,但结果都很奇怪。我的桌子没有被过滤掉。在值字段中,我只有一个常量用于所有记录。您名为“value”的字段的数据类型是什么?
select t.*
from mytable t
where t.value = (select max(t1.value) from mytable t1 where t1.date = t.date)
select *
from (
    select t.*, rank() over(partition by date order by value desc) rn
    from mytable t
) t
where rn = 1