У меня такой запрос:
DECLARE @DeadDesigns AS TABLE(
LegacyKey INT
,DesignKey INT
,StatusKey INT
,DesignGroupId UNIQUEIDENTIFIER
)
INSERT INTO @DeadDesigns
SELECT [P].[LegacyKey],[D].DesignKey, [D].[StatusKey], [D].[DesignGroupId] FROM Project AS P
INNER JOIN DesignGroup AS DG ON P.ProjectKey = DG.ProjectKey
INNER JOIN Design AS D ON DG.DesignGroupId = D.DesignGroupId
WHERE [D].[StatusKey] = 67 --DEAD
;WITH CTE2 (LegacyKey, DesignKey, StatusKey, DesignGroupId, RN) AS (
SELECT LegacyKey, DesignKey, StatusKey, DesignGroupId,
ROW_NUMBER() OVER (PARTITION BY [LegacyKey], [DesignGroupId] ORDER BY [DesignGroupId]) AS RN
FROM @DeadDesigns
GROUP BY [DesignGroupId],[LegacyKey],DesignKey,StatusKey
)
SELECT * FROM CTE2
Структура:
Один LegacyKey
может иметь несколько DesignGroupId
, а один DesignGroupId
может иметь несколько DesignKey
Цель состоит в том, чтобы получить последние DesignKey
каждого DesignGroupId
отдельно от проекта
Неверный результат:
+-----------+-----------+-----------+--------------------------------------+----+
| LegacyKey | DesignKey | StatusKEy | DesignGroupId | RN |
+-----------+-----------+-----------+--------------------------------------+----+
| 14002 | 2416 | 67 | 1A07C80E-E5E2-45F0-A5D2-419BAF3DC106 | 1 |
| 14002 | 2819 | 70 | 1A07C80E-E5E2-45F0-A5D2-419BAF3DC106 | 2 |
+-----------+-----------+-----------+--------------------------------------+----+
Это неверно, поскольку это тот же DesignGroupId, если что DesignGroupId был другим, результат был правильным.
Подробный результат желания:
Я хочу разделить его на DesignGroupId
, так что если есть два разных DesignGroupId
, и это одно и то же LegacyKey
RN
второго ряда должно быть 2 .. если у нас 3 DesignGroupId
, но то же самое LegacyKey
RN
второго ряда должно быть 3 и так далее. В конце я хочу получить ВСЕ последние DesignKey
внутри каждого DesignGroupId
внутри каждого LegacyKey
Что я делаю не так?
Другой пример
+-----------+-----------+-----------+--------------------------------------+----+
| LegacyKey | DesignKey | StatusKEy | DesignGroupId | RN |
+-----------+-----------+-----------+--------------------------------------+----+
| 18288 | 3974 | 63 | F18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 1 |
| 18288 | 4096 | 107 | F18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 2 |
| 18288 | 7224 | 66 | F18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 3 |
| 18288 | 4842 | 66 | A18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 1 |
| 18289 | 7325 | 66 | 90C224D9-2514-4294-8DEC-D3EE16EC2D00 | 1 |
| 18289 | 3975 | 63 | 90C224D9-2514-4294-8DEC-D3EE16EC2D00 | 2 |
+-----------+-----------+-----------+--------------------------------------+----+
В этом случае у меня есть два разных LegacyKey
, но результат неправильный, потому что он возвращает все RN
одного и того же DesignGroupId
, а мне нужен только последний. Желаемый результат:
+-----------+-----------+-----------+--------------------------------------+----+
| LegacyKey | DesignKey | StatusKEy | DesignGroupId | RN |
+-----------+-----------+-----------+--------------------------------------+----+
| 18288 | 7224 | 66 | F18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 3 |
| 18288 | 4842 | 66 | A18320D8-C7A8-4A2A-AFDE-38A483C24E81 | 1 |
| 18289 | 3975 | 63 | 90C224D9-2514-4294-8DEC-D3EE16EC2D00 | 2 |
+-----------+-----------+-----------+--------------------------------------+----+
Как видите, я получаю последние RN
из DesignGroupId
, но они совпадают LegacyKey