问题描述
我在执行任务时遇到问题,好像我有一个表Warehouse,其中包含公司库存的物品清单。这个 该表包含ItemID,ItemTypeID,InTime和OutTime列,其中InTime(OutTime) 指定各个物料进入(离开)仓库的时间点。我必须计算出公司没有物品进出仓库的最长时间。我正在尝试通过以下方式解决它:
[You,find,so,many,people,are,fimble,But,you,mostly,humble,I,love,the,way,wear,your,hair,Spreading,style,everywhere,You're,like,a,fountain,Enough,for,whole,mountain]
我的理解正确吗?因为我相信不是;)
解决方法
您希望两个连续动作(物品进入或离开仓库)之间的差距最大。一种方法是将输入和输出时间移到各行,然后使用lag()
获取“上一个”操作的日期。最后一步是聚合:
select max(x_time - lag_x_time) max_time_diff
from warehouse w
cross apply (
select x_time,lag(x.x_time) over(order by x.x_time) lag_x_time
from (
select w.in_time as x_time from dual
union all select w.out_time from dual
) x
) x
,
您可以直接在oracle中执行日期计算。
结果以天为单位计算。
如果要在数小时内完成,则将结果乘以24。
要以[天]为单位计算持续时间,并检查表中的所有信息:
SELECT round((OutTime - InTime)) as periodDay,Warehouse .*
FROM Warehouse
WHERE OutTime is not null
ORDER BY periodDay DESC
以[小时]为单位计算持续时间:
SELECT round((OutTime - InTime)*24) AS periodHour,Warehouse .*
FROM Warehouse
WHERE OutTime is not null
ORDER periodHour DESC
round()用于删除数字。
仅选择期限最长的记录。
SELECT *
FROM Warehouse
WHERE (OutTime - InTime) =
( SELECT MAX(OutTime - InTime) FROM Warehouse)
仅选择具有最大期限的记录,并指定期限。
SELECT (OutTime - InTime) AS period,Warehouse.*
FROM Warehouse
WHERE (OutTime - InTime) =
( SELECT MAX(OutTime - InTime) FROM Warehouse)
找到最长周期时,不需要条件where OutTime is null
。
SQL Server具有DateDiff,Oracle您可以将一个日期与另一个日期分开。 该代码看起来还可以。 Oracle有一个实时SQL工具,您可以在其中使用浏览器测试对您有帮助的查询。