teradata 以经济高效的方式更新 table

teradata updating a table in a cost effective manner

我有一个 table 有序号。这是一个非常大的 table 1600 万行。 table 有一个键,它有发生在那个键上的事件。每次更改密钥时,seq_nums 理论上都会重新启动。

在最初的 table 中,我有一个与每个事件关联的时间戳。为了获得事件的持续时间,我创建了一个滞后列,并从当前事件的时间戳中减去滞后列,从而得到持续时间。此持续时间在下面的table

中称为time_in_minutes

新的 table 有许多属性

我想将 time_in_mins 移动到 seq_num 1 如果是上一条记录中 Start 类型的 Event。因此,当我们稍后汇总时,分钟数将正确分配给启动

我可以尝试通过再次创建一个新列来更新 table 这次 time_in_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

感谢您的帮助

这将根据您的描述切换第 1 和第 2 个值,从而在 Explain 中产生单个 STAT 步骤:

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

现在您可以计算总和了。

但是在您创建 Voltile 时可能会包含上一步中的逻辑 Table,您也可以添加这个 Select 吗?