SQL как получить максимальную дату, если уже используется max - PullRequest
1 голос
/ 08 июля 2020

Я хочу получить максимальную дату публикации, а затем максимальную дату обработки. Когда я пытаюсь использовать MAX (a.processdate), это не сработает из-за того, что группа by и другой MAX уже используются.

SELECT f.PARENTACCOUNT
        , MAX(f.POSTDATE) AS [Post Date]
        , a.ProcessDate
        , s.type
        , CONCAT(n.FIRST, ' ', n.MIDDLE, ' ', n.LAST) AS [Member Name]
        , s.BALANCE
FROM dbo.FMHISTORY f
JOIN dbo.ACCOUNT a
    ON f.PARENTACCOUNT = a.ACCOUNTNUMBER
JOIN dbo.NAME n 
    ON f.PARENTACCOUNT = n.PARENTACCOUNT
        AND a.ProcessDate = n.ProcessDate
JOIN dbo.SAVINGS s
    ON f.PARENTACCOUNT = s.PARENTACCOUNT
        AND a.ProcessDate = s.ProcessDate
    where (a.WARNINGCODE1 = 52
        OR a.WARNINGCODE2 = 52
        OR a.WARNINGCODE3 = 52
        OR a.WARNINGCODE4 = 52
        OR a.WARNINGCODE5 = 52
        OR a.WARNINGCODE6 = 52
        OR a.WARNINGCODE7 = 52
        OR a.WARNINGCODE8 = 52
        OR a.WARNINGCODE9 = 52
        OR a.WARNINGCODE10 = 52)
        AND n.TYPE = 0
        AND f.PARENTACCOUNT = '0000123456'
GROUP BY f.PARENTACCOUNT, s.type, s.BALANCE, a.ProcessDate, n.FIRST, n.MIDDLE, n.LAST
ORDER BY f.PARENTACCOUNT

Это мой результат:

PARENTACCOUNT   Post Date       ProcessDate   type      Member Name     BALANCE
0000123456  2020-01-24 00:00:00  20180831      1          Jane Doe      12345.04
0000123456  2020-01-24 00:00:00  20180930      1          Jane Doe      12345.12
0000123456  2020-01-24 00:00:00  20181031      1          Jane Doe      12345.23
0000123456  2020-01-24 00:00:00  20181130      1          Jane Doe      12345.31

Я хочу, чтобы он просто возвращал это:

PARENTACCOUNT   Post Date       ProcessDate   type      Member Name     BALANCE
0000123456  2020-01-24 00:00:00  20181130      1          Jane Doe      12345.31

Примечание: a.processdate - это INT (я не создавал базу данных таким образом).

1 Ответ

1 голос
/ 08 июля 2020

Ну, вы можете использовать select top (1):

select top (1) . . .
. . .
order by f.PARENTACCOUNT, processdate desc

Если вам нужно сделать это для нескольких родительских учетных записей, тогда простой метод:

select top (1) with ties . . .
. . .
order by row_number() over (partition by f.parentaccount, processdate desc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...