2009-10-29 38 views
1

我需要编写一个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 
+0

你有主键吗? – AnthonyWJones 2009-10-29 15:45:14

+0

不存在主键 – user175084 2009-10-29 15:46:53

回答

4

通过你的表替换@ 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 
+0

这真是太棒了......是否有一个地方我可以阅读有关如何查询这样的内容......这将是一个很好的学习体验对我来说。 – user175084 2009-10-29 16:13:37

+0

SQL是一种有趣的语言。它需要练习(不仅仅是学习语法)来编写好的查询。如果我可以给你一个指针,我会告诉你使用“With”来分隔查询中的不同步骤,而不是写入长查询。查询优化器将负责为您分配with的值。 CROSS APPLY也是一个非常棒的功能(它也容易推理)。 – Nestor 2009-10-29 16:20:00

2
SELECT DISTINCT a.ID, a.Status, a.Dept, a.Files 
FROM table a 
INNER JOIN (
SELECT ID, MAX(files) AS Files 
FROM table 
GROUP BY ID) b ON a.ID = b.ID AND a.Files = b.Files 
+0

这并不能保证每个ID有一行(如果有两个ID具有相同的文件,那么您将得到该ID的2行)。看看我的答案来解决这个问题。 – Nestor 2009-10-29 15:54:30

+0

Msg 102,Level 15,State 1,Line 3 'InnerJoin'附近的语法不正确。 Msg 102,Level 15,State 1,Line 6 'b'附近语法不正确。 – user175084 2009-10-29 15:55:25

+0

加上这是我做的同样的事情...它与我编辑的查询相似.. – user175084 2009-10-29 15:56:25

0
SELECT MAX(files) as max_files, id, status, dept 
FROM table 
GROUP BY id 
+0

该团队将需要有地位,部门也...但如果我这样做,所有条目将被显示...所以这不是正确的..感谢艰难 – user175084 2009-10-29 16:02:08

+0

为什么GROUP BY需要这些额外的列? – teabot 2009-10-29 16:24:37

0

我可能是过度简化的问题,而是:

select top 5 * from SLAStat order by files desc; 
+0

这仅仅是一个例子......表中可能有很多条目.. – user175084 2009-10-29 15:58:19

相关问题