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

问题描述

我在执行任务时遇到问题,好像我有一个表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工具,您可以在其中使用浏览器测试对您有帮助的查询。

https://livesql.oracle.com/