Множественный выбор с MAX - PullRequest
0 голосов
/ 25 марта 2019

У меня есть T-SQL.И иметь несколько операторов выбора, я хочу получить максимум CompleteDate.Но как добавить оператор GROUP BY?

SELECT 
* 
FROM 
(
    SELECT
    ROW_NUMBER() OVER (PARTITION BY [Description],[SolveIssueCategory],
        [SolveIssueName],[SolveExplanation] ORDER BY [CompleteDate],[CompleteTime],
        [Status]) as sort, 
    * FROM
        (SELECT 
            ISNULL ([DispatchListMain].[Description] , '') as 'Description' ,
            ISNULL (SI.SolveIssueName , '') as 'SolveIssueName' ,
            ISNULL ([SolveIssue].[SolveIssueName] , '') as 'SolveIssueName' ,
            ISNULL ([Detail].[SolveExplanation] , '') as 'SolveExplanation' ,
            MAX (ISNULL (CONVERT (char(10) , [DetailTotal].[CompleteDate] , 111) , '')) 
                as 'CompleteDate' ,
            MAX (ISNULL (CONVERT (varchar(5) , CONVERT (datetime , 
                [DetailTotal].[CompleteDate]) , 108) , '')) as 'CompleteTime' ,
            ISNULL (CASE [Detail].[Status]
            WHEN 'S00' THEN 'temp'
            END , '') as 'Status'
    FROM 
        [DispatchListMain] JOIN [Detail] ON [Detail].[DispatchListMainId] = 
            [DispatchListMain].[id] 
        JOIN [Personnel]
        ON [Personnel].[Id] = [DispatchListMain].[PersonnelId]
        LEFT OUTER JOIN [SolveIssue] ON [SolveIssue].[Id] = [Detail].[SolveReason]
        JOIN [DetailTotal] ON [DetailTotal].[DispatchListMainId] = [DispatchListMain].[Id]
        LEFT OUTER JOIN 
        (SELECT [Id] , [SolveIssueCode] 
         , [SolveIssueName] , [SolveIssueCategory] 
         , [ParentId] 
         FROM [SolveIssue] WHERE SolveIssueCategory = 
            'SolveIssueCategory') SI
        ON SI.Id = [DetailTotal].[IssueCategory] 
    WHERE
        --GROUP BY [DispatchListMain].[id] 
        ERPNo = 'GN18030003' AND
        [Detail].[Status] <> 'S61' AND
        (CONVERT (varchar(10),([Detail].[CreateDate])) >= '2019/03/18' 
             AND CONVERT (varchar(10),([Detail].[CreateDate])) <= + '2019/03/25')) temp ) 
             temp2 WHERE temp2.sort = 1 ORDER BY 'CreateDate' DESC

1 Ответ

0 голосов
/ 25 марта 2019

Можно получить MAX, используя подзапрос, а затем GROUP BY их столбцы:

SELECT
  max(q.CompleteDate) MaxCompleteDate
, q.sort
--,  your grouped columns here
FROM
(
SELECT 
* 
FROM 
(
    SELECT
    ROW_NUMBER() OVER (PARTITION BY [Description],[SolveIssueCategory],
        [SolveIssueName],[SolveExplanation] ORDER BY [CompleteDate],[CompleteTime],
        [Status]) as sort, 
    * FROM
        (SELECT 
            ISNULL ([DispatchListMain].[Description] , '') as 'Description' ,
            ISNULL (SI.SolveIssueName , '') as 'SolveIssueName' ,
            ISNULL ([SolveIssue].[SolveIssueName] , '') as 'SolveIssueName' ,
            ISNULL ([Detail].[SolveExplanation] , '') as 'SolveExplanation' ,
            MAX (ISNULL (CONVERT (char(10) , [DetailTotal].[CompleteDate] , 111) , '')) 
                as 'CompleteDate' ,
            MAX (ISNULL (CONVERT (varchar(5) , CONVERT (datetime , 
                [DetailTotal].[CompleteDate]) , 108) , '')) as 'CompleteTime' ,
            ISNULL (CASE [Detail].[Status]
            WHEN 'S00' THEN 'temp'
            END , '') as 'Status'
    FROM 
        [DispatchListMain] JOIN [Detail] ON [Detail].[DispatchListMainId] = 
            [DispatchListMain].[id] 
        JOIN [Personnel]
        ON [Personnel].[Id] = [DispatchListMain].[PersonnelId]
        LEFT OUTER JOIN [SolveIssue] ON [SolveIssue].[Id] = [Detail].[SolveReason]
        JOIN [DetailTotal] ON [DetailTotal].[DispatchListMainId] = [DispatchListMain].[Id]
        LEFT OUTER JOIN 
        (SELECT [Id] , [SolveIssueCode] 
         , [SolveIssueName] , [SolveIssueCategory] 
         , [ParentId] 
         FROM [SolveIssue] WHERE SolveIssueCategory = 
            'SolveIssueCategory') SI
        ON SI.Id = [DetailTotal].[IssueCategory] 
    WHERE
        --GROUP BY [DispatchListMain].[id] 
        ERPNo = 'GN18030003' AND
        [Detail].[Status] <> 'S61' AND
        (CONVERT (varchar(10),([Detail].[CreateDate])) >= '2019/03/18' 
             AND CONVERT (varchar(10),([Detail].[CreateDate])) <= + '2019/03/25')) temp ) 
             temp2 WHERE temp2.sort = 1 ORDER BY 'CreateDate' DESC
)q
GROUP BY q.CompleteData, q.sort --, other your columns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...