如何获得组中的最新处理日期?

问题描述 投票:0回答:1

我想使用acct.processdate每月获取最新条目。我已经尝试过使用MAX()函数,但是由于使用了group by,所以它没有帮助。我该怎么做?

DECLARE @StartDate AS INT
        , @EndDate AS int

SET @StartDate = '20190131'
SET @EndDate = '20191130'

SELECT count(*) as [Account Count]
        , datename(MONTH, CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME)) AS [Month Name]
        , (CAST(CAST(acct.ProcessDate AS VARCHAR(10)) AS SMALLDATETIME)) AS [Process Date]

from ARCUSYM000.dbo.ACCOUNT acct

where acct.CLOSEDATE is null AND 
 (acct.ProcessDate >= @StartDate
    AND acct.ProcessDate <= @EndDate)
GROUP BY acct.ProcessDate
ORDER BY (CAST(CAST(acct.ProcessDate AS VARCHAR(10)) AS SMALLDATETIME)) desc

这是我当前的结果:

enter image description here

这是我想要的结果:

enter image description here

CTE的新结果:

enter image description here

sql sql-server
1个回答
0
投票

您可以将结果放入cte中并使用不存在的功能

DECLARE @StartDate AS INT
        , @EndDate AS int

SET @StartDate = '20190131'
SET @EndDate = '20191130'

;with cte as
(
SELECT count(*) as [Account Count]
        , datename(MONTH, CAST(CAST(ProcessDate AS VARCHAR(10)) AS SMALLDATETIME)) AS [Month Name]
        , (CAST(CAST(acct.ProcessDate AS VARCHAR(10)) AS SMALLDATETIME)) AS [Process Date]

from ARCUSYM000.dbo.ACCOUNT acct

where acct.CLOSEDATE is null AND 
 (acct.ProcessDate >= @StartDate
    AND acct.ProcessDate <= @EndDate)
GROUP BY acct.ProcessDate
)
select * from cte a
where not exists(select 1 from cte b where a.[Account Count] = b.[Account Count] and 
a.[Process Date] < b.[Process Date] )
© www.soinside.com 2019 - 2024. All rights reserved.