Teradata-计算不同行号的两个日期之间的差异

Teradata-计算不同行号的两个日期之间的差异,teradata,Teradata,我想将excel计算移到Teradata,但不确定如何操作。在excel中非常简单,我使用simple if来给我DIFF=IFA2=A3,C2-B3*24 在Teradata中有这样做的方法吗?我想再次计算每个号码的L_日期和T_日期之间的小时差。您可以使用窗口功能来实现这一点。重要的是要注意,在这种情况下,当您减去两个日期或时间戳时,您将以间隔类型返回,因此您需要指定所需的间隔类型以及其大小(秒、分钟、小时、天等) CREATE MULTISET VOLATILE TABLE yourtab

我想将excel计算移到Teradata,但不确定如何操作。在excel中非常简单,我使用simple if来给我DIFF=IFA2=A3,C2-B3*24


在Teradata中有这样做的方法吗?我想再次计算每个号码的L_日期和T_日期之间的小时差。

您可以使用窗口功能来实现这一点。重要的是要注意,在这种情况下,当您减去两个日期或时间戳时,您将以间隔类型返回,因此您需要指定所需的间隔类型以及其大小(秒、分钟、小时、天等)

CREATE MULTISET VOLATILE TABLE yourtable(
   ID     VARCHAR(3)
  ,T_DATE TIMESTAMP(0)
  ,L_DATE TIMESTAMP(0)
  ,DIFF   NUMERIC(6,2)
) PRIMARY INDEX (ID) ON COMMIT PRESERVE ROWS;
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 17:02:00','2019-10-08 20:35:00',5.83);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 14:45:00','2019-10-08 15:10:00',11.78);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 03:23:00','2019-10-08 10:25:00',17.32);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-09-08 17:06:00','2019-10-08 01:11:00',25.70);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-08-08 23:29:00','2019-09-08 10:27:00',NULL);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-08-08 09:34:00','2019-08-08 21:19:00',22.23);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-07-08 23:05:00','2019-08-08 06:09:00',18.03);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-07-08 12:07:00','2019-07-08 20:25:00',22.32);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-06-08 22:06:00','2019-07-08 08:53:00',22.77);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-06-08 10:07:00','2019-06-08 19:44:00',NULL);


SELECT yourtable.*,
    CAST(((LEAD(T_DATE) OVER (PARTITION BY ID ORDER BY T_DATE) - L_DATE) HOUR(4)) AS INTEGER) 
FROM yourtable;


+-----+---------------------+---------------------+--------+-------------------------------------------+
| ID  |       T_DATE        |       L_DATE        |  DIFF  | (LEAD (<value expression>) - L_DATE) HOUR |
+-----+---------------------+---------------------+--------+-------------------------------------------+
| AAA | 2019-08-08 23:29:00 | 2019-09-08 10:27:00 | <null> | 7                                         |
| AAA | 2019-09-08 17:06:00 | 2019-10-08 01:11:00 | 25.70  | 2                                         |
| AAA | 2019-10-08 03:23:00 | 2019-10-08 10:25:00 | 17.32  | 4                                         |
| AAA | 2019-10-08 14:45:00 | 2019-10-08 15:10:00 | 11.78  | 2                                         |
| AAA | 2019-10-08 17:02:00 | 2019-10-08 20:35:00 | 5.83   | <null>                                    |
| BBB | 2019-06-08 10:07:00 | 2019-06-08 19:44:00 | <null> | 3                                         |
| BBB | 2019-06-08 22:06:00 | 2019-07-08 08:53:00 | 22.77  | 4                                         |
| BBB | 2019-07-08 12:07:00 | 2019-07-08 20:25:00 | 22.32  | 3                                         |
| BBB | 2019-07-08 23:05:00 | 2019-08-08 06:09:00 | 18.03  | 3                                         |
| BBB | 2019-08-08 09:34:00 | 2019-08-08 21:19:00 | 22.23  | <null>                                    |
+-----+---------------------+---------------------+--------+-------------------------------------------+
CREATE MULTISET VOLATILE TABLE yourtable(
   ID     VARCHAR(3)
  ,T_DATE TIMESTAMP(0)
  ,L_DATE TIMESTAMP(0)
  ,DIFF   NUMERIC(6,2)
) PRIMARY INDEX (ID) ON COMMIT PRESERVE ROWS;
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 17:02:00','2019-10-08 20:35:00',5.83);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 14:45:00','2019-10-08 15:10:00',11.78);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-10-08 03:23:00','2019-10-08 10:25:00',17.32);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-09-08 17:06:00','2019-10-08 01:11:00',25.70);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('AAA','2019-08-08 23:29:00','2019-09-08 10:27:00',NULL);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-08-08 09:34:00','2019-08-08 21:19:00',22.23);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-07-08 23:05:00','2019-08-08 06:09:00',18.03);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-07-08 12:07:00','2019-07-08 20:25:00',22.32);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-06-08 22:06:00','2019-07-08 08:53:00',22.77);
INSERT INTO yourtable(ID,T_DATE,L_DATE,DIFF) VALUES ('BBB','2019-06-08 10:07:00','2019-06-08 19:44:00',NULL);


SELECT yourtable.*,
    CAST(((LEAD(T_DATE) OVER (PARTITION BY ID ORDER BY T_DATE) - L_DATE) HOUR(4)) AS INTEGER) 
FROM yourtable;


+-----+---------------------+---------------------+--------+-------------------------------------------+
| ID  |       T_DATE        |       L_DATE        |  DIFF  | (LEAD (<value expression>) - L_DATE) HOUR |
+-----+---------------------+---------------------+--------+-------------------------------------------+
| AAA | 2019-08-08 23:29:00 | 2019-09-08 10:27:00 | <null> | 7                                         |
| AAA | 2019-09-08 17:06:00 | 2019-10-08 01:11:00 | 25.70  | 2                                         |
| AAA | 2019-10-08 03:23:00 | 2019-10-08 10:25:00 | 17.32  | 4                                         |
| AAA | 2019-10-08 14:45:00 | 2019-10-08 15:10:00 | 11.78  | 2                                         |
| AAA | 2019-10-08 17:02:00 | 2019-10-08 20:35:00 | 5.83   | <null>                                    |
| BBB | 2019-06-08 10:07:00 | 2019-06-08 19:44:00 | <null> | 3                                         |
| BBB | 2019-06-08 22:06:00 | 2019-07-08 08:53:00 | 22.77  | 4                                         |
| BBB | 2019-07-08 12:07:00 | 2019-07-08 20:25:00 | 22.32  | 3                                         |
| BBB | 2019-07-08 23:05:00 | 2019-08-08 06:09:00 | 18.03  | 3                                         |
| BBB | 2019-08-08 09:34:00 | 2019-08-08 21:19:00 | 22.23  | <null>                                    |
+-----+---------------------+---------------------+--------+-------------------------------------------+
 MAX(T_DATE) OVER (PARTITION BY ID ORDER BY T_DATE ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)