2016-10-20 3 views
0

私は、勘定、日付、および時間(2つの別々のフィールド)による明細取引を持っていますが、個々の取引ごとに固有の識別子はありません。私は、同じ時間に行われる広告申込情報をグループ化して、お互いに1時間以内に控えめにすることで、これを最もよく推測したいと考えています。私の最初の考えは、時間フィールドから時間を抽出し、それを使用していましたが、トランザクションが1時間を超えることができるインスタンスがあります。たとえば、1行目は午前8時57分に行され、2行目は午前9時01分に行われました。私はこれらを一緒にグループ化したいが、時間を使ってもそれを達成できないだろう。Teradata SQL - Grouping Observationsをまとめて閉じる?

どのような考えですか?以下に、グループ化するかどうかを示すフィールドを追加した例を示します。

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 
+0

は、テーブル内の日付と時刻の別々の列ですか? –

+0

はい、別々の列です – user1723699

+0

次の時間に切り上げる境界を定義する必要があります。そこから、 'CASE'文中に' EXTRACT(時間から時間) 'と' EXTRACT(時間から時間) 'を使用して、真夜中までの丸めに対処し、次の「DAY」。 –

答えて

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 
; 
+0

@ user1723699、それはあなたの質問に答えますか? –

関連する問題