我的任务有问题,看起来我有一个表Warehouse,其中包含一个公司库存项目的列表。这表包含列ItemID、ItemTypeID、InTime和OutTime,其中InTime(OutTime(指定各个项目进入(离开(仓库的时间点。我必须计算公司没有物品进出仓库的最长时间。我正试图用这种方式解决这个问题:
select MAX(OutTime-InTime) from Warehouse where OutTime is not null
我的理解正确吗?因为我相信它不是;(
您希望任何两个连续操作(物品进入或离开仓库(之间的间隔最大。一种方法是将输入和输出时间取消到行,然后使用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工具,您可以在浏览器中测试查询,这将对您有所帮助。
https://livesql.oracle.com/