MSSQL - Как получить сложение для агрегированного значения для запроса группового выбора - PullRequest
0 голосов
/ 20 марта 2019

У меня есть запрос на выборку, который приводит таблицу со значениями, такими как:

+--------+-----------+-------------+----------------+-------------+----------------+
|SystemId|EquipmentId|ActiveStageId|ActiveStageOrder|StageStatusId|StageStatusOrder|
+--------+-----------+-------------+----------------+-------------+----------------+
|   1    |    288    |     1       |       1        |      3      |       3        |
|   1    |    355    |     1       |       1        |      7      |       6        |
|   1    |    80     |     2       |       3        |      1      |       1        |
|   1    |    288    |     4       |       2        |      1      |       1        |
|   2    |    412    |     4       |       2        |      2      |       2        |
|   2    |    54     |     2       |       3        |      4      |       5        |
+----------------------------------------------------------------------------------+
etc...

И мне нужно сгруппировать этот результат по SystemId и выбрать: SystemId , count EquipmentId , ActiveStageId для сгруппированной системы с минимальным значением ActiveStageOrder и StageStatusId для предыдущего ActiveStageId с минимальным значениемif StageStatusOrder .
Я знаю, как получить сгруппированную таблицу с агрегированными значениями min () и count () :

SELECT SystemId, COUNT(EquipmentId) as EqupmentCount,
       MIN(ActiveStageOrder) as ActiveStageOrder
FROM [dbo].[Table]
GROUP BY SystemId

Но как я могу получить ActiveStageId за мин. ActiveStageOrder и StageStatusId за мин. StageStatusOrder ?Необходимо получить результат для приведенного выше примера:

+--------+-------------+-------------+-------------+
|SystemId|EqupmentCount|ActiveStageId|StageStatusId|
+--------+-------------+-------------+-------------+
|   1    |      4      |     1       |      3      |
|   2    |      2      |     4       |      1      |
+--------------------------------------------------+

1 Ответ

0 голосов
/ 20 марта 2019

попробуйте, как показано ниже, используя оконную функцию

   with cte as (
      select SystemId,count(*) over(partition by SystemId) as EqupmentCount,
       FIRST_VALUE(ActiveStageId)over(partition by SystemId order by ActiveStageOrder) ActiveStageId,
       FIRST_VALUE(StageStatusId) over( partition by SystemId order by ActiveStageOrder,StageStatusOrder) StageStatusId
     from table_name
       ) select distinct * from cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...