Sql — Расчет Дней Инвентаризации

#sql #sql-server #datediff

Вопрос:

Я пытаюсь рассчитать день инвентаризации с течением времени. У меня проблема с получением фактической суммы дневных запасов за последний месяц. Так что, что касается первой строки, 9 дней-это правильно. Однако во второй строке должно быть указано 34. Так как я хочу рассчитать дни между Inv_date и «сегодняшней» датой. Давайте предположим, что, когда я пишу это, сегодняшняя дата — «2021-03-25».

Итак, у меня есть таблица, такая как:

Перенести Inv_Date Дата покупки Вторые дни
2021-02-01 00:00:00.000 20210219 Нулевой 9
2021-03-01 00:00:00.000 20210219 Нулевой 40

Чего я ожидаю, так это:

Перенести Inv_Date Дата покупки Вторые дни
2021-02-01 00:00:00.000 20210219 Нулевой 9
2021-03-01 00:00:00.000 20210219 Нулевой 34

Мой Sql-скрипт для расчета InvdDays:

 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
 

Комментарии:

1. Пожалуйста, объясните логику.

Ответ №1:

Хммм … Я предполагаю, что вам нужно количество дней с последнего дня transdate и . inv_date Это было бы что-то вроде этого:

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

Возможно, произошла ошибка с точностью до 1, потому что вы на самом деле не объяснили логику.

Комментарии:

1. Я обновил свой вопрос, так что для первой строки 9 дней верны. Однако во второй строке должно быть указано 34. Так как я хочу рассчитать дни между Inv_date и «сегодняшней» датой. Так как дата покупки всегда будет равна нулю.

2. @user3052850 . . . Дата покупки в этой логике не используется. Я думаю, это делает то, что ты хочешь.