大浪淘沙999 2022-04-13 01:01 采纳率: 100%
浏览 268
已结题

Sql Server 有关库龄的问题代码如何编写

(出入库表) (商品编号) (出入库日期) (数量)
入库 123 2020-01-01 100
入库 234 2020-01-02 100
出库 123 2020-01-03 50
出库 234 2020-01-04 50
出库 123 2020-01-05 50
出库 234 2020-01-06 50
入库 123 2020-01-07 100
入库 234 2020-01-08 100
出库 123 2020-01-09 30
出库 234 2020-01-10 30

按截止指定时间搜索结果 2020-2-20
按先进先出原则

想要达成这样的效果
(商品编号) (库龄) (库存)
123 40 70
234 41 70

declare @dt datetime
set @dt='2020-1-20'

declare @t1 table ( pid char(18),datetime datetime, amount int)
insert @t1 select '123', '2020-01-01', 1000
union select '123', '2020-01-15', 1000
union select '234', '2020-01-01', 1000
union select '234', '2020-01-15', 1000

declare @t2 table ( pid char(18),datetime datetime, amount int)
insert @t2 select '123', '2020-01-01', 50
union select '123', '2020-01-02', 50
union select '123', '2020-01-05', 50
union select '234', '2020-01-01', 50
union select '234', '2020-01-02', 50
union select '234', '2020-01-05', 50

select t1.pid,DATEDIFF(day,t1.maxDate,@dt)+1 '库龄',(t1.totalNum - t2.totalNum) '库存' from

(select pid,max(datetime) maxDate,sum(amount) totalNum from @t1 where DATEDIFF(day,datetime,@dt)>=0 group by pid) t1

left join (select pid,sum(amount)totalNum from @t2 where DATEDIFF(day,datetime,@dt)>=0 group by pid) t2 on t1.pid=t2.pid

按你的还是不正确
应该的到的是

123 20 1850
234 20 1850

结果库龄是 6 就是第二次进货的库龄了, 实际是第一次没销售完,就库龄就还是第一次的进货时间

  • 写回答

7条回答 默认 最新

  • codeSniping 2022-04-13 10:08
    关注

    应该可以满足你的需求(你问题中的[出入库表]应该是字段标识,而不是表名,不知道是不是你的笔误):

    select
    t1.商品编号,
    DATEDIFF(day,t1.maxDate,'2020-2-20')+1 '库龄',
    (t1.totalNum - t2.totalNum) '库存'
    from (select 商品编号,max(出入库日期) maxDate,sum(库存) totalNum from 出入库表 where 出入库标识='入库' and DATEDIFF(day,出入库日期,'2020-2-20')>=0 group by 商品编号) t1
    left join (select 商品编号,sum(库存)totalNum from 出入库表 where 出入库标识='出库' and DATEDIFF(day,出入库日期,'2020-2-20')>=0 group by 商品编号) t2 on t1.商品编号=t2.商品编号
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 修改了问题 4月13日
  • 赞助了问题酬金10元 4月13日
  • 展开全部

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号