SQL> Сервер> Как запросить дополнительные поля - PullRequest
0 голосов
/ 09 марта 2020

У меня следующий запрос, он отлично работает и дает мне 200 строк. Однако я хотел получить дополнительные поля из таблицы ExecutionLogStorage. Когда я добавил ExecutionLogStorage.TimeStart, ExecutionLogStorage.TimeDataRetrieval с группой по результату составляет более 8 000 строк. Как я могу получить самую последнюю дату (максимум даты) и при этом сохранить 200 строк данных.

Select * from (
SELECT        ExecutionLogStorage.ReportID, COUNT(*) AS HitCount, Catalog.Name, ExecutionLogStorage.UserName
FROM            [SP_RPT_SVC].[dbo].ExecutionLogStorage INNER JOIN
                         Catalog ON [SP_RPT_SVC].[dbo].ExecutionLogStorage.ReportID = Catalog.ItemID
where Catalog.[Type] = 2
GROUP BY ExecutionLogStorage.ReportID, Catalog.Name, ExecutionLogStorage.UserName) X

LEFT Join

(SELECT [Id]     
      ,[DirName]
      ,[LeafName] 
FROM [SP_BI].[dbo].[AllDocs]) Y
on
Y.ID = X.ReportID

LEFT Join

(SELECT [NTName],[PreferredName]
  FROM [SP_ProfileDB].[dbo].[UserProfile_Full]) Z
ON
X.UserName = Z.NTName

1 Ответ

0 голосов
/ 09 марта 2020

Как я могу получить самую последнюю дату (максимум даты) и при этом сохранить 200 строк данных.

Нет необходимости изменять предложение GROUP BY: просто добавьте больше агрегатов функции к вашему внутреннему запросу:

SELECT * 
FROM (
    SELECT        
        ExecutionLogStorage.ReportID, 
        COUNT(*) AS HitCount, 
        Catalog.Name, 
        ExecutionLogStorage.UserName,
        MAX(ExecutionLogStorage.TimeStart) MaxTimeStart --> here,
        MAX(ExecutionLogStorage.TimeDataRetrieval) MaxTimeDataRetrieval --> and here
    FROM [SP_RPT_SVC].[dbo].ExecutionLogStorage 
    INNER JOIN Catalog 
        ON [SP_RPT_SVC].[dbo].ExecutionLogStorage.ReportID = Catalog.ItemID
    WHERE Catalog.[Type] = 2
    GROUP BY 
        ExecutionLogStorage.ReportID, 
        Catalog.Name, 
        ExecutionLogStorage.UserName
) X
LEFT JOIN ...
...