Sql 按2列获取分组,日期为最新
我有2个表,我正在获取记录,如下所示 查询如下:Sql 按2列获取分组,日期为最新,sql,sql-server,sql-server-2012,sql-server-2008-r2,Sql,Sql Server,Sql Server 2012,Sql Server 2008 R2,我有2个表,我正在获取记录,如下所示 查询如下: Select BMC.JCRS_Mem_crs_Code, BMC.JCRS_Mem_Description, BMC.JCRS_Mem_Date, BJCM.JCRS_Mast_Title From Bus_MemberCourse BMC Inner Join Bus_JourneymanCourseMaster BJCM On BMC.JCRS_Mem_crs_Co
Select BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description,
BMC.JCRS_Mem_Date,
BJCM.JCRS_Mast_Title
From Bus_MemberCourse BMC
Inner Join Bus_JourneymanCourseMaster BJCM
On BMC.JCRS_Mem_crs_Code = BJCM.JCRS_Mast_Code
Where BMC.JCRS_Mem_Completed = 1
And BMC.JCRS_Mem_mem_ID = 5010
Group By BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description,
BMC.JCRS_Mem_Date,
BJCM.JCRS_Mast_Title
但是我想要的是我需要在Jcrs_mem_crs_代码和Jcrs_mem_描述上创建group by,如果这两列数据是常见的,那么我只想从这多个日期中获取最新的日期。i、 e.我只想选择该行,而忽略其他行。您只需要MAX(date)
:
您根本不需要
分组依据
(您在查询中没有进行任何聚合)
这可以通过在这两列上使用分区的窗口函数来轻松完成,同时按日期排序:
;With Cte As
(
Select BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description,
BMC.JCRS_Mem_Date,
BJCM.JCRS_Mast_Title,
Row_Number() Over (Partition By BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description
Order By BMC.JCRS_Mem_Date Desc) As RN
From Bus_MemberCourse BMC
Inner Join Bus_JourneymanCourseMaster BJCM
On BMC.JCRS_Mem_crs_Code = BJCM.JCRS_Mast_Code
Where BMC.JCRS_Mem_Completed = 1
And BMC.JCRS_Mem_mem_ID = 5010
)
Select JCRS_Mem_crs_Code,
JCRS_Mem_Description,
JCRS_Mem_Date,
JCRS_Mast_Title
From Cte
Where RN = 1
您使用的是SQL Server 2012
还是SQL Server 2008 R2
?选择一个。@Siyual此查询可以在这两种情况下运行,对吗?。谢谢你formatting@Xtremcool是的,但2012年引入了很多2008年没有的有用功能。该版本限制或扩展了可能的答案。@AaronDietz ok,很好
;With Cte As
(
Select BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description,
BMC.JCRS_Mem_Date,
BJCM.JCRS_Mast_Title,
Row_Number() Over (Partition By BMC.JCRS_Mem_crs_Code,
BMC.JCRS_Mem_Description
Order By BMC.JCRS_Mem_Date Desc) As RN
From Bus_MemberCourse BMC
Inner Join Bus_JourneymanCourseMaster BJCM
On BMC.JCRS_Mem_crs_Code = BJCM.JCRS_Mast_Code
Where BMC.JCRS_Mem_Completed = 1
And BMC.JCRS_Mem_mem_ID = 5010
)
Select JCRS_Mem_crs_Code,
JCRS_Mem_Description,
JCRS_Mem_Date,
JCRS_Mast_Title
From Cte
Where RN = 1