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
如果您仍然想要一个小时的结果,您可以简单地提取它。
我有一个 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
如果您仍然想要一个小时的结果,您可以简单地提取它。