【问题标题】:Sql - Calculate Inventory DaysSql - 计算库存天数
【发布时间】:2021-06-22 11:16:51
【问题描述】:

我正在尝试计算一段时间内的库存天数。我在获取上个月库存的实际天数时遇到问题。所以对于第一行,9天是正确的。但是第二行应该显示 34。因为我想计算 Inv_date 和“今天的”日期之间的天数。假设我在写这篇文章时,今天的日期是“2021-03-25”。

所以我有一个表格,例如:

Transdate Inv_Date Purch_Date InvDays
2021-02-01 00:00:00.000 20210219 Null 9
2021-03-01 00:00:00.000 20210219 Null 40

我期待的是:

Transdate Inv_Date Purch_Date InvDays
2021-02-01 00:00:00.000 20210219 Null 9
2021-03-01 00:00:00.000 20210219 Null 34

我用于 InvdDays 计算的 Sql 脚本是:

case when left(Getdate(),8) >= left(convert(varchar,Transdate,112),8) then 
datediff(day,Inv_date,
dateadd(day,-1,dateadd(month,1,Transdate))
)
else 
isnull(ABS(DATEDIFF(day, Inv_date, isnull(Purch_Date, Getdate()))),0) end as InvDaysStandQty

【问题讨论】:

  • 请解释逻辑。

标签: sql sql-server datediff


【解决方案1】:

嗯。 . .我推测您想要从transdateinv_date 的最后一天算起的天数。应该是这样的:

select datediff(day, inv_date,
                (case when convert(date, getdate()) < eomonth(transdate)
                      then getdate() else eomonth(transdate)
                 end)
                )

可能有一个 off-by-1 错误,因为您还没有真正解释逻辑。

【讨论】:

  • 我已经更新了我的问题,所以对于第一行,9 天是正确的。但是第二行应该显示 34。因为我想计算 Inv_date 和“今天的”日期之间的天数。由于购买日期将始终为空。
  • @user3052850 。 . .此逻辑中不使用购买日期。我认为这可以满足您的需求。
猜你喜欢
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多