SQL Server: ВЫБЕРИТЕ строки с MAX (столбец A), MAX (столбец B), DISTINCT по связанным столбцам - PullRequest
0 голосов
/ 13 марта 2010

Сценарий:

Таблица A
MasterID, дата добавления, дата добавления, дата обновления, дата обновления,
1, 01.01.2010, 'Фред', ноль, ноль
2, 1/2/2010, «Барни», «Мистер Шифер, 1/7/2010
3, 1/3/2010, «Noname», ноль, ноль

Таблица B
MasterID, дата добавления, дата добавления, дата обновления, дата обновления,
1, 1/3/2010, 'Wilma', 'The Great Kazoo', 1/5/2010
2, 04.01.2010, «Бетти», «Дино», 1/4/2010

Стол С
MasterID, дата добавления, дата добавления, дата обновления, дата обновления,
1, 05.01.2010, «Камешки», ноль, ноль
2, 06.01.2010, 'BamBam', ноль, ноль

Таблица D
MasterID, дата добавления, дата добавления, дата обновления, дата обновления,
1, 1/2/2010, «Noname», ноль, ноль
3, 04.01.2010, 'Wilma', ноль, ноль

Мне нужно вернуть максимальную добавленную дату и соответствующего пользователя, а также максимальную обновленную дату и соответствующего пользователя для каждой отдельной записи, когда таблицы A, B, C & D объединены в UNION, т.е.
1, 05.01.2010, «Галька», «Великий Казу», 1/5/2010
2, 1/6/2010, 'BamBam', 'Mr. Шифер, 1/7/2010
3, 04.01.2010, 'Wilma', ноль, ноль

Я знаю, как сделать это с одной датой / пользователем на строку, но с двумя мне не под силу.
СУБД - SQL Server 2005. Предпочитается решение T-SQL.

Заранее спасибо,
Dave

1 Ответ

0 голосов
/ 13 марта 2010

Сделайте так, как если бы вы использовали одну дату / пользователя на строку, и повторите для измененной даты, затем объедините две результирующие таблицы вместе в MasterID.

SELECT added.MasterID, added.AddedDate, added.AddedBy, modif.UpdatedDate, modif.UpdatedBy FROM
(
SELECT a.MasterID, a.AddedDate, b.AddedBy FROM
(
    SELECT MasterID, Max(AddedDate) As AddedDate FROM
    (
        SELECT * FROM TableA
        UNION ALL
        SELECT * FROM TableB
        UNION ALL
        SELECT * FROM TableC
        UNION ALL
        SELECT * FROM TableD
    )
    GROUP BY MasterID
) a
JOIN
(
        SELECT * FROM TableA
        UNION ALL
        SELECT * FROM TableB
        UNION ALL
        SELECT * FROM TableC
        UNION ALL
        SELECT * FROM TableD
) b
ON a.MasterID = b.MasterID AND a.AddedDate = b.AddedDate
) added
LEFT OUTER JOIN
(
SELECT a.MasterID, a.UpdatedDate, b.UpdatedBy FROM
(
    SELECT MasterID, Max(UpdatedDate) As UpdatedDate FROM
    (
        SELECT * FROM TableA
        UNION ALL
        SELECT * FROM TableB
        UNION ALL
        SELECT * FROM TableC
        UNION ALL
        SELECT * FROM TableD
    )
    GROUP BY MasterID
) a
JOIN
(
        SELECT * FROM TableA
        UNION ALL
        SELECT * FROM TableB
        UNION ALL
        SELECT * FROM TableC
        UNION ALL
        SELECT * FROM TableD
) b
ON a.MasterID = b.MasterID AND a.UpdatedDate = b.UpdatedDate
) modif
ON added.MasterID = modif.MasterID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...