美文网首页
SQL查询物料最新采购价格示例(窗口函数应用)

SQL查询物料最新采购价格示例(窗口函数应用)

作者: 刘有劲 | 来源:发表于2021-08-13 20:45 被阅读0次

    本示例基于SQL Server数据库,通过 窗口函数(window function),对数据进行多字段排序,并获取排序后的第1条数据,以实现查询 “物料在最新采购日期的最小采购价格” 的目的。

    SQL取值逻辑:

    1、如果同一物料存在多条采购记录,取采购日期最大的;
    2、如果同一采购日期存在多条记录,取采购价格最低的。

    目标数据与查询结果:
    Step1: 创建临时表,并插入测试数据
    if Object_id('Tempdb..#temp1') is not null drop table #temp1
    create table #temp1(ItemNumber varchar(10),PurchDate date,PurchPrice decimal(10,2))
    insert into #temp1(ItemNumber,PurchDate,PurchPrice)
    select 'Item01', '2016-1-8',3.33 union all
    select 'Item01', '2016-5-8',2.22 union all
    select 'Item01', '2016-3-8',1.11 union all
    select 'Item02', '2016-3-9',4.44 union all
    select 'Item02', '2016-5-9',5.55 union all
    select 'Item02', '2016-1-9',6.66 union all
    select 'Item03', '2016-1-7',9.99 union all
    select 'Item03', '2016-3-7',8.88 union all
    select 'Item03', '2016-3-7',7.77
    
    Step2: 查询所有测试数据
    select * from #temp1 order by ItemNumber asc,PurchDate desc,PurchPrice asc
    
    Step3: 通过窗口函数row_number() over partition by,对数据排序后取第1条
    select *
    from (
        select ItemNumber,PurchDate,PurchPrice,
        row_number() over(partition by ItemNumber order by ItemNumber asc,PurchDate desc,PurchPrice asc) row_num
        from #temp1) t1
    where t1.row_num=1
    

    注:通过调整 order by 也可实现其他需求,例如取最早日期或最高采购价格的记录。

    转自我早年间的个人博客:MIS NOTE

    相关文章

      网友评论

          本文标题:SQL查询物料最新采购价格示例(窗口函数应用)

          本文链接:https://www.haomeiwen.com/subject/onxjbltx.html