在SQL查询中,需要去除重复选项,并且按照时间来进行排序,取排序分组中第一条数据。
然后在网上找到了解决方案,使用分析函数row_number() over (partiion by … order by …)来进行分组编号,然后取分组标号值为1的记录即可。目前主流的数据库都有支持分析函数,很好用。
其中,partition by 是指定按哪些字段进行分组,这些字段值相同#的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。
示例(SQL Server 2005或以上适用):
select s.[SAPCode]
,s.[Specifications]
,s.[Material]
,s.[UnitPrice]
from (
select SAPCode,Specifications,Material, UnitPrice,row_number() over (partition by [SAPCode] order by SAPCode,LastOperateDatetime DESC) as group_idx
from [OASystem].[dbo].[SPWMS_SpareParts]
) s
where s.group_idx = 1) as b