Как отсортировать и сгруппировать первые 2 элемента?

Мне нужно отсортировать нужные объекты и взять первые 2 элемента и сгруппировать. Для примера:

    CREATE TEMP TABLE signal_info
(
    id      INTEGER NOT NULL,
    signal  INTEGER NOT NULL,
    station CHAR(5) NOT NULL,
    ownerid INTEGER NOT NULL
);
INSERT INTO signal_info VALUES(111, 120, 'Home', 1);
INSERT INTO signal_info VALUES(111, 130, 'Car' , 1);
INSERT INTO signal_info VALUES(111, 135, 'Work', 2);
INSERT INTO signal_info VALUES(222, 98 , 'Home', 2);
INSERT INTO signal_info VALUES(222, 95 , 'Work', 1);
INSERT INTO signal_info VALUES(111, 140, 'Home', 1);
INSERT INTO signal_info VALUES(222, 160 , 'Work', 1);

SELECT station, count(station) as countStation, sum(Signal) as sum
            FROM signal_info
            where station in ('Home', 'Work')
            GROUP BY station

Для примера мне нужно отсортироть по большему signal и взять первые 2 элемента. Нужно получить: Work - 2 - 295 Home - 2 - 260

Как сделать? Использую SQL сервер


Ответы (1 шт):

Автор решения: Sergey Moiseenko
;with cte as
(select station, signal, row_number() over(partition by station order by signal desc) rn
from signal_info)
select station, sum(signal) from cte
where rn<=2 and station in
(select top 2 station from signal_info order by signal desc)
group by station;
→ Ссылка