【问题标题】:Grouping results of query by Time in TeradataTeradata中按时间分组查询结果
【发布时间】:2017-02-25 06:08:02
【问题描述】:

我有一个表,其中包含 [Account_No、Transaction_Amount、Transaction_Date 和 Transaction_Time] 列。我想选择一天内“交易金额总和超过2,000,000/-且交易时间在10分钟内”的账户。这将是什么查询。请帮忙。 我正在使用 Teradata。

问候

卡瓦

【问题讨论】:

  • 你能和更多细节吗? 交易时间在 1 到 10 分钟之间是什么意思,在 10 分钟内或一个小时/天的前十分钟内?
  • 这将是“10 分钟内”先生。
  • 任何 10 分钟的时间段?从 14:03 到 14:13?还是您的意思是 14:00 - 14:09、14:10 - 14:19 等?你如何定义 10 分钟的开始?
  • 我的想法是检查一天的交易总和,如果总和大于 2M,则检查他们的交易时间,以及第一笔交易到最后一笔交易的时间范围是否为 10 分钟或少然后向他们展示。这是我只是不知道它的语法。我希望现在我把自己说清楚了。
  • 午夜过后的 10 分钟间隔怎么样?例如。 2017-02-26 23:57:30 至 2017-02-27 00:07:30

标签: teradata


【解决方案1】:

一种方法是自联接(因为 Teradata 没有实现 RANGE OVER 语法),如下所示:

SELECT t1.Account_No,
   t1.Transaction_Date,
   t1.Transaction_Time, 
   Sum(t2.Transaction_Amount) AS sumamt
FROM tab AS t1
JOIN tab AS t2
  ON t1.Account_No = t2.Account_No
 -- same day within the next ten minutes of a transaction
 AND t2.Transaction_Date = t1.Transaction_Date
 AND t2.Transaction_Time BETWEEN t1.Transaction_Time
                             AND t1.Transaction_Time + INTERVAL '10' MINUTE
GROUP BY 1,2,3
HAVING sumamt >= 2000000 -- more than 2 mio
QUALIFY 
   Row_Number() -- only one row per account/day
   Over (PARTITION BY t1.Account_No, t1.Transaction_Date
         ORDER BY t1.Transaction_Time) = 1

【讨论】:

  • 嗨,@dnoeth,抱歉延迟回复,因为在周末我无法访问 Teradata,所以我不得不等待一周开始才能检查。您建议的查询有效,我得到了结果。但是有一个问题,即“查询使结果加倍”,例如如果有两个实际交易查询显示 4。所以我将查询简化为单个故事并且它有效。不过,感谢您宝贵的时间和回复。最好的问候。
猜你喜欢
  • 2011-02-08
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2011-07-24
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多