SQL Server отдельно выбрать только самую последнюю дату - PullRequest
0 голосов
/ 11 мая 2018

Итак, у меня есть отдельный запрос, и я могу сузить свой список до того, что мне нужно, но бывают случаи, когда в последней таблице может быть 3 правильных выбора, и я хочу только последнее вхождение.

Текущий запрос:

SELECT DISTCINT
    D.Filename, S.Name AS State, W.Name AS 'Workflow Name', U.Username AS 'Name', 
    CONVERT(VARCHAR, TH.Date, 101) AS [Entered State], 
    DATEDIFF(dd, TH.Date, GETUTCDATE()) AS [Days In State]
FROM
    Status AS S 
INNER JOIN
    Documents AS D ON D.CurrentStatusID = S.StatusID 
INNER JOIN
    Workflows AS W ON W.WorkflowID = S.WorkflowID 
INNER JOIN 
    TransitionHistory AS TH ON D.DocumentID = TH.DocumentID 
                            AND D.LatestRevisionNo - 1 = TH.RevNr 
INNER JOIN
    Users AS U ON U.UserID = TH.UserID
WHERE
    d.Filename NOT LIKE '%test%' 
    AND d.filename NOT LIKE '%^%' 
    AND S.Name IN ('Initiated', 'Design Review', 'Change Pending Approval',
                   'Under Editing', 'Waiting for Approval', 'Under Change',
                   'ECO Design Review', 'Minor Change no Revision',)
    AND W.Name IN ('Production')
ORDER BY
    Filename

В качестве примера, если я выберу определенный файл (см. Изображение), вы можете увидеть результаты:

enter image description here

Вы можете видеть в последней таблице, что результаты дают 3 строки, которые соответствуют критериям, я пытаюсь найти простой способ, чтобы он соответствовал всем моим критериям, а затем выводил только самый высокий TransitionNr или самую последнюю дату.

Я не человек SQL, я собрал это из поисков Google - но я просто не могу найти последний кусок.

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Быстрое решение будет:

SELECT D.Filename, S.Name AS STATE, W.Name AS 'Workflow Name', U.Username AS 'Name',
CONVERT(VARCHAR, MAX(TH.DATE), 101) AS [Entered State],
DATEDIFF(dd, MAX(TH.DATE), GETUTCDATE()) AS [Days In State]
FROM STATUS S
INNER JOIN Documents D ON D.CurrentStatusID = S.StatusID
INNER JOIN Workflows W ON W.WorkflowID = S.WorkflowID
INNER JOIN TransitionHistory TH ON (D.DocumentID = TH.DocumentID AND D.LatestRevisionNo - 1 = TH.RevNr)
INNER JOIN Users AS U ON U.UserID = TH.UserID
WHERE d.Filename NOT LIKE '%test%'
AND d.filename NOT LIKE '%^%'
AND S.Name IN ('Initiated', 'Design Review', 'Change Pending Approval', 'Under Editing', 'Waiting for Approval', 'Under Change', 'ECO Design Review', 'Minor Change no Revision')
AND W.Name IN ('Production')
GROUP BY D.Filename, S.Name, W.Name, U.Username
0 голосов
/ 11 мая 2018

попробуйте заменить все ссылки на TH.Date на MAX(TH.Date) в вашем запросе.

...