Sql 从数据库表中获取行的最大值
我需要编写一个SQL查询,它将从表中获取文件最大值的行 数据库表如下所示:Sql 从数据库表中获取行的最大值,sql,database,sql-server-2005,Sql,Database,Sql Server 2005,我需要编写一个SQL查询,它将从表中获取文件最大值的行 数据库表如下所示: > ID status dept files > > > 1 1 23 1256637314 > > > > 1 1 39 1256642968 > > > > 2 0 85 1256551419 > > > > 2 1 90 1256642968 > > &g
> ID status dept files
>
> > 1 1 23 1256637314
> >
> > 1 1 39 1256642968
> >
> > 2 0 85 1256551419
> >
> > 2 1 90 1256642968
> >
> > 2 1 93 1256810937
> >
> > 3 0 20 1256642968
> >
> > 5 1 342 1256810937
现在从这个表中,我想得到那些按ID分组的文件数最多的行:
> ID status dept files
>
> 1 1 39 1256642968
>
> 2 1 93 1256810937
>
> 3 0 20 1256642968
>
> 5 1 342 1256810937
有什么建议吗
谢谢
我试过了,但这不对
Select ID, Status, dept,files
from SLAStat
where files in (Select Max(files) from SLAStat group by ID)
2 1 90 1256642968
1 1 39 1256642968
3 0 20 1256642968
5 1 342 1256810937
2 1 93 1256810937
我可能过于简化了问题,但是:
select top 5 * from SLAStat order by files desc;
我可能过于简化了问题,但是:
select top 5 * from SLAStat order by files desc;
将@t1替换为您的表:
With idT as (
select ID
from @t1
group by id
)
select applyT.*
from idT p
CROSS APPLY (
select top 1 * from @t1 where ID=p.ID order by files desc
) as applyT
将@t1替换为您的表:
With idT as (
select ID
from @t1
group by id
)
select applyT.*
from idT p
CROSS APPLY (
select top 1 * from @t1 where ID=p.ID order by files desc
) as applyT
这并不能保证每个ID有一行(如果有两个ID具有相同的文件..则该ID将有两行)。请看我的答案来解决这个问题。Msg 102,级别15,状态1,第3行“InnerJoin”附近的语法不正确。消息102,级别15,状态1,第6行“b”附近的语法不正确。错误消息是字面上说的“InnerJoin”还是“InnerJoin”?区别在于我在子查询中包含了ID。@Nestor我已经更新了它以进行不同的查找。它所需要的只是一个独特的。这并不能保证每个ID有一行(如果有两个ID具有相同的文件..您将得到该ID的两行)。请看我的答案来解决这个问题。Msg 102,级别15,状态1,第3行“InnerJoin”附近的语法不正确。消息102,级别15,状态1,第6行“b”附近的语法不正确。错误消息是字面上说的“InnerJoin”还是“InnerJoin”?区别在于我在子查询中包含了ID。@Nestor我已经更新了它以进行不同的查找。所有需要的是一个独特的。该小组将需要有地位,部门也。。。但如果我这样做,所有条目都将显示。。。所以这是不对的。。感谢Tough为什么GROUP BY需要这些额外的列?GROUP BY需要有状态、部门和。。。但如果我这样做,所有条目都将显示。。。所以这是不对的。。谢谢Tough为什么小组需要那些额外的专栏?这太棒了。。。。有没有一个地方我可以读到关于如何像这样查询。。。这对我来说将是一次很好的学习经历。SQL是一种有趣的语言。编写好的查询需要练习(而不是学习语法)。如果我能给您一个指针,我会告诉您使用“With”来分隔查询中的不同步骤,而不是编写长查询。查询优化器将负责为您分解with。交叉应用也是一个很棒的功能(也更容易推理)。这太棒了。。。。有没有一个地方我可以读到关于如何像这样查询。。。这对我来说将是一次很好的学习经历。SQL是一种有趣的语言。编写好的查询需要练习(而不是学习语法)。如果我能给您一个指针,我会告诉您使用“With”来分隔查询中的不同步骤,而不是编写长查询。查询优化器将负责为您分解with。交叉应用也是一个很棒的特性(它也更容易推理)。