从多行中获取一个条目的查询

3

查询:

select machinename, StatusCode, max(size) as size, statusID
from machine where MachineID In( '33','22') and StatusCode = 166 
group by machinename, StatusCode, statusID
order by max(size) DESC

结果:

   machinename  StatusCode  size statusID
    -----------  ----------  ---- --------
    test1        166         50       1
    test1        166         25       2
    test2        166         75       3
    test2        166         48       4

需求:

我需要仅显示每个机器的一个条目。我必须通过在上面显示的两个条目之间取最大尺寸值来实现这一点。例如,对于test1,我有两个尺寸为50和25,我必须显示具有50并忽略具有25的行。

谢谢

期望结果:

 machinename  StatusCode  size statusID
    -----------  ----------  ---- --------
    test1        166         50       1  
    test2        166         75       3 

谢谢约翰。我正要修复它.. 这很快.. :) - user175084
1
一开始看起来我以为这很简单,但是如果不使用Mark的解决方案,我就想不出来了! - Kiley Naro
1
需要注意的是,你的数据库可能存在一些规范化问题。你说StatusID是主键,所以重复组的存在表明可能存在问题。StatusCode是否函数依赖于StatusID或machinename?由于machinename很可能依赖于MachineID,这似乎本身就是一个异常情况。 - Kiley Naro
1个回答

3
SELECT machinename, StatusCode, size, statusID
FROM (
    SELECT
        machinename,
        StatusCode,
        size,
        statusID,
        ROW_NUMBER() OVER (PARTITION BY MachineID ORDER BY size DESC) AS rn
    FROM machine
    WHERE MachineID IN ('33','22')
    AND StatusCode = 166 
) T1
WHERE rn = 1
ORDER BY size DESC 

这个很完美,你能解释一下 "ROW_NUMBER() OVER (PARTITION BY MachineID ORDER BY size DESC) AS rn" 吗?如果可以的话。就像它实际上在做什么。 - user175084

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接