首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个日期的DateDiff在同一列SQL中

两个日期的DateDiff在同一列SQL中
EN

Stack Overflow用户
提问于 2014-04-29 13:45:33
回答 4查看 21K关注 0票数 4

使用Server 2005,我需要获得位于同一列中的2个日期的datediff,表如下所示:

代码语言:javascript
复制
OrderNo    OpNo    ResType    LoadedStartDate
-----------------------------------------------------
12345      1       PAINT      2014-05-01 00:00:00.000
12345      2       PAINT      2014-05-02 00:00:00.000
12345      3       PAINT      2014-05-03 00:00:00.000
12345      4       ASMB       2014-05-04 00:00:00.000
67890      1       PAINT      2014-05-02 00:00:00.000
67890      2       PAINT      2014-05-03 00:00:00.000
67890      3       PAINT      2014-05-04 00:00:00.000
67890      4       ASMB       2014-05-05 00:00:00.000

我需要获得OpNo 1和OpNo 4的日期差异,其中它们是相同的订单号。OpNo将永远是1和4,就像我试图比较的那样,ResType也是如此。

输出需要如下所示:

代码语言:javascript
复制
OrderNo    Difference
----------------------
12345      3
67890      3

(谢谢你的帮助:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-29 14:09:54

只需将表加入到自己的位置:

代码语言:javascript
复制
SELECT t1.OrderNo,DATEDIFF(day,t1.LoadedStartDate,t2.LoadedStartDate)
FROM UnnamedTableFromQuestion t1
       INNER JOIN
     UnnamedTableFromQuestion t2
       on
         t1.OrderNo = t2.OrderNo
WHERE t1.OpNo = 1 and
      t2.OpNo = 4
票数 5
EN

Stack Overflow用户

发布于 2014-04-29 13:53:10

应该很简单

代码语言:javascript
复制
SELECT DATEDIFF(day, 
         (SELECT LoadedStartDate FROM Orders WHERE OrderNo = 12345 AND OpNo = 1),
         (SELECT LoadedStartDate FROM Orders WHERE OrderNo = 12345 AND OpNo = 4)
       )

因为内部选择返回标量值,所以它们可以用作DATEDIFF函数的参数。

要使此操作适用于表中的所有订单,您可以执行以下操作:

代码语言:javascript
复制
SELECT DISTINCT OrderNo, DATEDIFF(day, 
          (SELECT LoadedStartDate FROM Orders WHERE OrderNo = Ord.OrderNo AND OpNo = 1),
          (SELECT LoadedStartDate FROM Orders WHERE OrderNo = Ord.OrderNo AND OpNo = 4)
       ) AS Diff
FROM Orders Ord

演示: http://sqlfiddle.com/#!3/bc085/5

票数 0
EN

Stack Overflow用户

发布于 2014-04-29 14:12:26

CTE在这样的场景中发挥着神奇的作用。对于您的需求,可以使用以下查询。

代码语言:javascript
复制
with op1
As
(
select orderno, opno, restype, LoadedStartDate From orders
where opno = 1
),
op4
As
(
select orderno, opno, restype, LoadedStartDate From orders
where opno = 4
)
select op1.orderno, datediff(day, op1.loadedstartdate, op4.loadedstartdate) DifferenceDays 
from op1 inner join op4 on op1.orderno = op4.orderno

希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23366495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档