azure 在SQL中使用UNIX时间聚合数据

sqyvllje  于 2023-08-07  发布在  Unix
关注(0)|答案(1)|浏览(119)

我已经看到很多文章讨论了如何使用DATEPARTS()来基于日期时间聚合数据,但我还没有发现任何专门针对UNIX时间讨论这一点的文章。我的目标是能够根据提供的初始和最终时间戳,按秒、分钟、小时或天聚合数据。举例来说:假设我的约会时间是:

tstart = datetime('2023-05-22 07:00:00','TimeZone','UTC');
tstop = datetime('2023-05-23 07:00:00','TimeZone','UTC');

字符串
这些转换为:

Tstart = "1684738800000000"
Tstop = "1684825200000000"


这是已经过去的微秒数。之所以转换为UNIX,是因为服务器端的数据集只有这种时间戳格式,而没有datetime列。我怎样才能做到这一点不同的agg类型,如秒,分钟,小时,和天和规模乘数的?(即2秒,7小时等),因此,如果我有微秒的数据频率,并且我在上面提供的时间表上将其转换为每3小时一次,我会得到如下内容:
Output
我还没有尝试过任何东西,因为我不知道从哪里开始,因为我以前没有使用过UNIX。
Azure数据结构我正在尝试对以下对象执行agg/calc:
Data

aiqt4smr

aiqt4smr1#

要按3小时间隔聚合表中的数据并计算每个间隔的data1data2的平均值,可以采用以下方法。

SQL代码

with
   cte1 as (SELECT  DATEADD(SECOND, timestamp / 1000000, '19700101') AS dt,* FROM  Mytable1),
   cte2 as (select DATEPART(hour,dt)-((DATEPART(hour, dt) + 0) % 3) as interval, cast(dt as date) as date_col,* from cte1)
select min(timestamp) as timestamp, avg(data1) as data1, avg(data2) as data2 from cte2 group by date_col,interval;

字符串
第一个CTE(cte1)使用DATEADD函数将Mytable1表中的Unix时间戳转换为datetime值。第二个CTE(cte2)使用DATEPART函数计算每个datetime值的3小时间隔。最后一个SELECT语句按日期和间隔对数据进行分组,并计算每组的最小时间戳以及data1data2的平均值。
db-fiddle

相关问题