我有一张包含数百个时间戳的表格。
我提取小时,然后我可以简单地平均一下,但是,这是我遇到问题的地方。
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中执行此操作?
答案 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)。这些时间在不同的日子发生的事实是偶然的。
所以你一直都有正确的答案。