Получить максимальное число в зависимости от отношений

#sql #tsql

#sql #tsql

Вопрос:

У меня есть этот запрос:

  SELECT
                   MAX([D].[DesignKey]) AS [DesignKey]
                   FROM [Project] AS [P]
                       INNER JOIN [DesignGroup] AS [DG] ON [P].[ProjectKey] = [DG].[ProjectKey]
                       INNER JOIN [Design] AS [D] ON [DG].[DesignGroupId] = [D].[DesignGroupId]
                   GROUP BY
                          [P].[ProjectKey]
                        , [D].[Name]
                        ORDER BY DesignKey
  

Мое отношение таково: у одного проекта может быть несколько DesignGroups , а у одного Design может быть несколько DesignGroups , но у одного проекта НЕ МОЖЕТ быть нескольких проектов

Что я хочу сделать, это выбрать максимальный номер ключа дизайна для каждого DesignGroup как я могу этого добиться? С моим запросом он возвращает все DesignKeys, ему все равно, является ли он последним в каждой designGroup. С уважением

Ответ №1:

Это должно делать то, что вы хотите:

 SELECT [DG].[DesignGroupId], MAX([D].[DesignKey]) AS [DesignKey]
FROM [DesignGroup] [DG] JOIN
     [Design] [D]
     ON [DG].[DesignGroupId] = [D].[DesignGroupId]
GROUP BY [DG].[DesignGroupId];
  

Обратите внимание, что PROJECT таблица не нужна для ответа на ваш вопрос.

Ответ №2:

используйте DesignGroupId для группирования и выбора

 SELECT
                  DesignGroupId, MAX([D].[DesignKey]) AS [DesignKey]
                   FROM [Project] AS [P]
                       INNER JOIN [DesignGroup] AS [DG] ON [P].[ProjectKey] = [DG].[ProjectKey]
                       INNER JOIN [Design] AS [D] ON [DG].[DesignGroupId] = [D].[DesignGroupId]
                   GROUP BY
                          DesignGroupId
                       ORDER BY DesignKey