Teradata的平均小时数

时间:2015-04-25 00:18:47

标签: sql datetime timestamp teradata

我有一张包含数百个时间戳的表格。

我提取小时,然后我可以简单地平均一下,但是,这是我遇到问题的地方。

select purchase,
CAST(AVG(EXTRACT(HOUR FROM opened_at)) AS INT) as average_open
            from db.purchasetable 
group by 1

当我平均小时22和小时2时,我得到12(显然),然而,我想要的是0因为午夜是两小时之间的平均时间点。

如何在Teradata中执行此操作?

2 个答案:

答案 0 :(得分:2)

您无法在time上取平均值,但允许interval :-)

减去两次返回一个间隔:

AVG(CAST(opened_at AS TIME(0))            -- extract only the time portion
     - TIME '12:00:00' HOUR TO SECOND(0)) -- subtract 12 hours to center at midnight (returns an interval)
+ TIME '00:00:00'                         -- change it back to a time

如果你仍然需要一个小时的结果,你可以简单地提取它。

答案 1 :(得分:0)

检查您的房屋。将小时数视为不同长度的字符串,从同一个地方(午夜)开始。所以两个字符串的平均长度,长度为22,另一个为长度为2。

也就是说,凌晨2点到晚上10点之间的平均值是中午,而不是午夜(长度= 0)。这些时间在不同的日子发生的事实是偶然的。

所以你一直都有正确的答案。