Запрос на получение одной записи из нескольких строк - PullRequest
3 голосов
/ 29 сентября 2011

Запрос:

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 

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011
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 
2 голосов
/ 30 сентября 2011

Три решения для "старого" SQL Server s :

SELECT  *
FROM    TestData a
WHERE   a.Size >= ALL(SELECT b.Size FROM TestData b WHERE b.MachineName=a.MachineName);

SELECT  *
FROM    TestData a
WHERE   a.Size = (SELECT MAX(b.Size) FROM TestData b WHERE b.MachineName=a.MachineName);

SELECT  a.*
FROM    TestData a
JOIN    (SELECT MachineName, MAX(Size) MaxSize FROM TestData GROUP BY MachineName) b 
ON      a.MachineName=b.MachineName 
AND     a.Size=b.MaxSize;

Результаты:

MachineName StatusCode  Size        StatusID
----------- ----------- ----------- -----------
test2       166         75          3
test1       166         50          1

Предупреждение: если имеется много строк с одинаковым максимумомзначение для машины, тогда все эти запросы будут показывать эти строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...