teradata以经济高效的方式更新表
我有一张有序列号的表。这是一张非常大的桌子,共有1600万行。该表有一个键,它有发生在该键上的事件。每次键更改时,seq_nums在理论上重新启动 在我的原始表中,有一个与每个事件相关的时间戳。为了得到事件的持续时间,我创建了一个滞后列,并从当前事件的时间戳中减去滞后列,得到持续时间。此持续时间在下表中称为teradata以经济高效的方式更新表,teradata,Teradata,我有一张有序列号的表。这是一张非常大的桌子,共有1600万行。该表有一个键,它有发生在该键上的事件。每次键更改时,seq_nums在理论上重新启动 在我的原始表中,有一个与每个事件相关的时间戳。为了得到事件的持续时间,我创建了一个滞后列,并从当前事件的时间戳中减去滞后列,得到持续时间。此持续时间在下表中称为时间(单位:分钟) 新表有许多属性 在这种情况下,每个钥匙都是洗车,每个事件都被分配了一个类别,因此在第3行,汽车被提交到一个45分钟的干燥程序 第二行包含23分钟,实际上不是23分钟的清洗
时间(单位:分钟)
新表有许多属性
- 在这种情况下,每个钥匙都是洗车,每个事件都被分配了一个类别,因此在第3行,汽车被提交到一个45分钟的干燥程序
- 第二行包含23分钟,实际上不是23分钟的清洗时间,机器需要23分钟才能通电
- 在ID号144中,机器通电记录缺失。这似乎在数据集中很普遍
key Event time in mins seq_num 1 Start 0 1 1 Wash 23 2 1 Dry 45 3 1 Wash 56 4 1 Wash 78 5 1 Boil 20 6 1 ShutDown 11 7 2 Start 0 1 2 Wash 11 2 2 Dry 12 3 ------------------------------------------- 144 Wash 0 1 144 Wash 11 2 144 Dry 12 3
事件,我想将时间(单位:分钟)
移动到序号1。因此,当我们稍后汇总时,分钟数将正确分配给启动
我可以尝试通过再次创建一个新列来更新该表,这次的time\u in\u mins
,但这似乎相当昂贵
有人知道这样做的聪明方法吗
编辑2016年10月14日
客户的最终输出如下所示,尽管有点不正常
key event total minutes
1 Start 23
1 Boil 20
1 Dry 45
1 Wash 134
1 ShutDown 11
2 Start 11
2 Dry 12
2 Wash 0
感谢您的帮助这将根据您的描述切换第一个和第二个值,从而在解释中产生一个统计步骤:
SELECT key, seq_num, event,
CASE
WHEN seq_num = 1
AND Event = 'Start'
THEN Min(CASE WHEN seq_num = 2 THEN time_in_mins ELSE 0 END)
Over (PARTITION BY key)
WHEN seq_num = 2
AND Min(CASE WHEN seq_num = 1 THEN Event END)
Over (PARTITION BY key) = 'Start' THEN 0
ELSE time_in_mins
END AS new_time_in_mins
FROM tab
现在你可以算数了
但是,在创建电压表时,可能会在上一步中包含逻辑,是否也可以添加此Select?如果只有序号1,但没有序号2呢?这是一个非常好的问题,并提出了另一个我没有想到的问题,如果序号1中的值不是零呢。我将更新问题以反映这一点。您真的要更新表还是只在Select中进行计算?您的Teradata版本是什么?你能加上预期的结果吗?顺便说一句,1600万行不是一个大表:)嗨@dnoeth。1600万行在我的spool空间中是一个不稳定的表,但您可能在总体方案中是正确的:)。他的尺寸是一个月,但他们想分析12个月。我很乐意在选择中这样做,因为这将是客户使用的答案…我现在将用最终结果更新问题hi@dnoeth,这正是我想要的。非常感谢你的帮助