我对如何在teradata中实现这一点非常头疼。
我有两个表,需要从run表中提取分钟数,并根据weights表为它们分配小时权重。
表1:运行
Machine Begin End
A 1/1/2010 08:00 AM 1/1/2010 10:45 AM
B 1/2/2010 10:00 AM 1/2/2010 11:45 AM
表2:重量
每小时分配一次体重(记录1显示在上午8点到9点之间每跑一分钟体重为10)
Hour Weight
1/1/2010 08:00 AM 10
1/1/2010 09:00 AM 15
1/1/2010 10:00 AM 16
1/1/2010 11:00 AM 20
1/1/2010 11:00 AM 20
1/1/2010 12:00 AM 25
需要的结果:
Mach Hour Weight Mins Total (Weight*Mins)
A 1/1/2010 08:00 AM 10 60 600
A 1/1/2010 09:00 AM 15 60 900
A 1/1/2010 10:00 AM 16 45 720
B 1/2/2010 10:00 AM 16 60 960
B 1/2/2010 11:00 AM 20 45 900
感谢您的指导。提前谢谢。
编辑:以下是示例表
CREATE TABLE RUNS(NAME VARCHAR(50),START_DT timestamp(0),END_dt timestamp(0));
INSERT INTO RUNS VALUES ('A','2020-01-01 08:00:00','2020-01-01 10:15:00');
INSERT INTO RUNS VALUES ('B','2020-01-02 10:00:00','2020-01-02 11:45:00');
CREATE TABLE WEIGHTS(HOUR_MS timestamp(0),WEIGHT INTEGER);
INSERT INTO WEIGHTS('2020-01-01 08:00:00', 10);
INSERT INTO WEIGHTS('2020-01-01 09:00:00', 15);
INSERT INTO WEIGHTS('2020-01-01 10:00:00', 16);
INSERT INTO WEIGHTS('2020-01-01 11:00:00', 20);
INSERT INTO WEIGHTS('2020-01-02 10:00:00', 20);
INSERT INTO WEIGHTS('2020-01-02 11:00:00', 25);
2条答案
按热度按时间jfewjypa1#
这是一种使用基于重叠的非等连接的暴力方法:
explain将显示一个product join,它会导致高cpu使用率。有一种更聪明的方法是使用expand-on,但对我来说太晚了,也许明天:-)
l3zydbqr2#
另一种方法是在子查询中使用expand on,然后使用equality join: