首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一ID的日期差异

同一ID的日期差异
EN

Stack Overflow用户
提问于 2018-11-28 17:52:06
回答 1查看 280关注 0票数 0

我有一个类似于

代码语言:javascript
复制
    +----+------------+------------+------------+

    | ID |   Udate    | last_code  | Ddate      | 
    +----+------------+------------+------------+
    |  1 | 05/11/2018 | ACCEPTED   | 13/10/2018 |
    |  1 | 03/11/2018 | ATTEMPT    | 13/10/2018 | 
    |  1 | 01/11/2018 | INFO       | 13/10/2018 |
    |  1 | 22/10/2018 | ARRIVED    | 13/10/2018 | 
    |  1 | 15/10/2018 |   SENT     | 13/10/2018 | 
    +----+------------+------------+------------+

我正在尝试获取Udate上每个代码的日期差异,但对于第一次约会,我希望在Udate和Ddate之间设置日期差异。

所以我一直在尝试:

代码语言:javascript
复制
DATEDIFF(DAY,LAG(Udate) OVER (PARTITION BY Shipment_Number ORDER BY Udate), Udate)

要得到日期之间的差异,到目前为止,它是有效的,但我也需要Udate和date之间的第一个日期差异。

我在想ISNULL()

此外,在最后,我需要一个平均天数之间的代码以及,通常他们保持相同的模式。样本输出数据:

代码语言:javascript
复制
    +----+------------+------------+------------+------------+

    | ID |   Udate    | last_code  | Ddate      | Difference |
    +----+------------+------------+------------+------------+
    |  1 | 05/11/2018 | ACCEPTED   | 13/10/2018 |     2      |
    |  1 | 03/11/2018 | ATTEMPT    | 13/10/2018 |     2      |
    |  1 | 01/11/2018 | INFO       | 13/10/2018 |     10     |
    |  1 | 22/10/2018 | ARRIVED    | 13/10/2018 |     7      |
    |  1 | 15/10/2018 |   SENT     | 13/10/2018 |     2      |
    +----+------------+------------+------------+------------+

注意,当没有前面的代码时,日期差异在Udate和Ddate之间。

任何想法都会很感激。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-29 07:10:58

好吧,ISNULL是去这里的路。

由于您还想要平均值差异,所以可以使用一个公共表表达式来获取差异,并查询它以获得平均值:

首先,创建并填充示例数据(--请在您以后的问题中保存此步骤)

代码语言:javascript
复制
-- This would not be needed if you've used ISO8601 for date strings (yyyy-mm-dd | yyyymmdd)
SET DATEFORMAT DMY; 

DECLARE @T AS TABLE
    (
    ID int,
    UDate date,
    last_code varchar(10),
    Ddate date
    ) ;

INSERT INTO @T (ID, Udate, last_code, Ddate) VALUES

(1, '05/11/2018', 'ACCEPTED', '13/10/2018'),
(1, '03/11/2018', 'ATTEMPT' , '13/10/2018'), 
(1, '01/11/2018', 'INFO'    , '13/10/2018'),
(1, '22/10/2018', 'ARRIVED' , '13/10/2018'), 
(1, '15/10/2018', 'SENT'    , '13/10/2018');

反恐执行委员会:

代码语言:javascript
复制
WITH CTE AS
(
    SELECT  ID, 
            Udate, 
            last_code, 
            Ddate,
            DATEDIFF(
                DAY, 
                ISNULL(
                    LAG(Udate) OVER(PARTITION BY ID ORDER BY Udate), 
                    Ddate
                ), 
                UDate
            ) As Difference
    FROM @T
)

查询:

代码语言:javascript
复制
SELECT *, AVG(Difference) OVER(PARTITION BY ID) As AverageDifference
FROM CTE;

结果:

代码语言:javascript
复制
ID  Udate       last_code   Ddate       Difference  AverageDifference
1   15.10.2018  SENT        13.10.2018  2           4
1   22.10.2018  ARRIVED     13.10.2018  7           4
1   01.11.2018  INFO        13.10.2018  10          4
1   03.11.2018  ATTEMPT     13.10.2018  2           4
1   05.11.2018  ACCEPTED    13.10.2018  2           4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53525346

复制
相关文章

相似问题

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