Teradata SQL - 分组观察一起关闭?

时间:2016-10-20 16:20:58

标签: sql teradata

我有一个按帐户,日期和时间(两个单独的字段)进行订单项交易的表,但每个单独的交易都没有唯一的标识符。我想通过对大约在同一时间完成的订单项进行分组来对此进行最佳猜测,比如在一小时之内保守一致。我最初的想法是从时间字段中提取小时并使用它,但有些情况下交易可以跨越一小时。例如,第1行在上午8:57完成,第2行在上午9:01完成。我希望将这些组合在一起,但只是使用小时不会实现这一点。

有什么想法?下面提供了示例数据,附加字段显示我是否将它们组合在一起。

Account | Date   | Time      | Group
A       | 1/1/16 | 8:57:00   | 1
A       | 1/1/16 | 9:01:00   | 1
A       | 1/1/16 | 9:16:00   | 1
A       | 1/1/16 | 12:15:00  | 2
A       | 1/1/16 | 12:32:00  | 2
B       | 1/2/16 | 7:23:00   | 3
B       | 1/2/16 | 7:24:00   | 3
B       | 1/3/16 | 9:18:00   | 4
B       | 1/3/16 | 11:24:00  | 5

1 个答案:

答案 0 :(得分:0)

select      "Account"
           ,"Date"
           ,"Time"
           ,count (is_new_group) over (partition by "Account" order by ts rows unbounded preceding) + 1     as "Group"


from       (select      "Account"
                       ,"Date"
                       ,"Time"
                       ,cast ("Date" as timestamp) + (("Time" - time '00:00:00') hour to second)                                                                        as ts 
                       ,case when ts > min (ts) over (partition by "Account" order by ts rows between 1 preceding and 1 preceding) + interval '1' hour then 'Y' end     as is_new_group

            from        t
            )
            t
;