Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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_Database_Sql Server 2005 - Fatal编程技术网

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

我需要编写一个SQL查询,它将从表中获取文件最大值的行

数据库表如下所示:

> 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。交叉应用也是一个很棒的特性(它也更容易推理)。