Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как добавить столбец по максимальной дате?  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Добрый день. Был простенький запрос который возвращал максимальную дату
SELECT [CA].[RepObj], MAX( RF.Date ) as [RfidDate]
--FROM...
GROUP BY [CA].[RepObj]

RepObj RfidDate
A2027CCB-9EC3-4C56-B190-2418584C90C1 2019-11-18 08:23:08.383
0ADA876A-4C54-4EFB-8D72-62CE5CEE1A3E 2019-11-18 08:22:59.630
0C24D28A-CC4A-44F7-89A9-6D6BC5EB3BF1 2019-11-18 05:00:32.347
93E8FECB-8782-4357-B0FC-75C147594F50 2019-11-14 05:58:58.200
B8BBC8B6-F36F-434F-9574-91CDAF1E708D 2019-11-18 08:23:18.533
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2019-11-18 08:20:07.260
4E54A711-2C00-41FB-BC23-B27002F03127 2019-11-16 14:41:00.097
E0472205-8C90-4C66-A5EF-F36BE9399875 2019-11-18 07:43:28.233


Появилась необходимость получить доб столбец который находится в той же таблице.

Написал такой запрос, результат правильный, но он очень долго думает:
SELECT tb1.[RepObj],  tb1.[PressForm], tb1.[Date]
FROM(
    SELECT [CA].[RepObj], 
            RL.[Asset] AS [PressForm], 
            RF.[Date], 
            ROW_NUMBER() OVER(PARTITION BY CA.[RepObj] ORDER BY RF.[Date] DESC) AS R
    -- FROM ...
) AS tb1
WHERE tb1.R = 1


Пробовал так, но выводятся лишние данные
SELECT [CA].[RepObj], RL.[Asset] AS [PressForm], MAX( RF.[Date] ) as [RfidDate]
 -- FROM
GROUP BY [CA].[RepObj], RL.[Asset]


Подскажите пожалуйста куда копать.
18 ноя 19, 08:41    [22018433]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить столбец по максимальной дате?  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 510
https://docs.microsoft.com/ru-RU/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver15
См. пример Б. Использование предложения OVER с агрегатными функциями.
18 ноя 19, 08:51    [22018439]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить столбец по максимальной дате?  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
попробовал написать так
SELECT [CA].[RepObj], RL.[Asset] AS [PressForm], MAX(RF.[Date]) OVER(PARTITION BY RF.[Reader]) AS [RfDate]
--FROM


Выводит кучу одинаковых записей
RepObj PressForm RfDate
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330
5B22FE0E-36A5-42AE-A280-93E6D47B4044 2FA8379C-4863-4232-9954-B79862E4F0E6 2019-07-08 10:32:51.330

не жду конца запроса
18 ноя 19, 09:08    [22018444]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить столбец по максимальной дате?  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Вот полный запрос
SELECT [CA].[RepObj], RL.[Asset] AS [PressForm], MAX(RF.[Date]) OVER(PARTITION BY RF.[Reader]) AS [RfDate]
FROM [table1]  AS [CON]
LEFT JOIN [table2] AS [CA] ON CA.[Client] = [CON].[Oid] 
LEFT JOIN [table3] AS [RR] ON RR.[Asset] = CA.[RepObj]
LEFT JOIN [table4] AS [RF] ON RF.[Reader] = [RR].[Oid] 
LEFT JOIN [table5] AS [RL] ON RL.[Oid] = [RF].[Label]
WHERE CA.[Active] = 1
18 ноя 19, 09:11    [22018447]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить столбец по максимальной дате?  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Вопрос закрыть.
18 ноя 19, 11:13    [22018510]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить