Teradata 中的平均一天中的小时数

Average Hour of Day in Teradata

我有一个 table 有数百个时间戳。

我提取了小时,然后我可以简单地对其进行平均,但是,这是我遇到问题的地方。

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 中执行此操作?

检查你的场所。将小时视为从同一地点(午夜)开始的不同长度的字符串。所以两个字符串的平均长度,一个长度为22,另一个长度为2,是12.

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

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

您不能在 time 上取平均值,但在 interval 上可以取平均值 :-)

减去两次return一个区间:

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

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