如何在SQL中计算两个特定日期之间的最长期限



我的任务有问题,看起来我有一个表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/

相关内容

  • 没有找到相关文章

最新更新