振圈cosmosdb nosql groupby在多个列上有汇总

问题描述 投票:0回答:1
Edit:专注于实际问题更新了数值(不是字符串),并修复了查询中的复制式错误。

问题:

我在CosmosDB中有文档,其中存储了这样的天气传感器测量值:

"Body": { "Type": "Telemetry", "Temp": 4.43, "Hum": 77.65, "Baro": 935.77, "BaroSLP": 1010.90, "Alt": 666.05, "SBattery": 3751.00, "GBattery": 4466, "RSSI": -81, "Version": 8, "TimeStamp": "2025-03-15T16:11:35Z" }

我想查询使用这些值的文档,每小时平均。
我精心制作了这个查询,我通常会用sql做什么:

SELECT AVG(i.Body.Temp) as Temp, AVG(i.Body.Hum) as Hum, AVG(i.Body.Baro) as Baro, AVG(i.Body.BaroSLP) as BaroSLP, AVG(i.Body.Alt) as Alt, AVG(i.Body.SBattery) as Battery, Max(i.Body.TimeStamp) as Time FROM iothub i WHERE i.partitionKey = @key and i.Body.TimeStamp >= @fromTime and i.Body.TimeStamp <= @toTime group by datetimepart("hh", i.Body.TimeStamp)

这不起作用。我了解到,对于AVG,我需要类似的价值:

SELECT VALUE AVG(i.Body.Temp)
FROM iothub i
WHERE i.partitionKey = @key and i.Body.TimeStamp >= @fromTime and i.Body.TimeStamp <= @toTime
group by datetimepart("hh", i.Body.TimeStamp)
...

问题:

即使上述有效,我将无法找到一种在多个列上使用聚合物的句法正确的方法,例如以下(坏)示例: SELECT VALUE AVG(i.Body.Temp) as Temp, VALUE AVG(i.Body.Hum) as Hum, ... ... ...

因此,这是可以用Azure cosmosdb nosql langauge来实现的?

thanks @martin为您的见解。是的,@laszlo我在环境中尝试过,当数据通过查询中使用
StringToNumber

函数从字符串转换为数字时,它可以成功地工作。我尝试使用以下查询,它使用

stringToNUmber
nosql azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票
string

转换为

number
。另外,使用
AVG()
计算该特定小时的每个数字字段的
averagity。
SELECT datetimepart("hh", i.Body.TimeStamp) AS hh, AVG(StringToNumber(i.Body.Temp)) AS Temp, AVG(StringToNumber(i.Body.Hum)) AS Hum, AVG(StringToNumber(i.Body.Baro)) AS Baro, AVG(StringToNumber(i.Body.BaroSLP)) AS BaroSLP, AVG(StringToNumber(i.Body.Alt)) AS Alt, AVG(StringToNumber(i.Body.SBattery)) AS SBattery, MAX(i.Body.TimeStamp) AS TimeStamp, COUNT(1) AS Count FROM iothub i GROUP BY datetimepart("hh", i.Body.TimeStamp)
输出:
[ { "hh": 17, "Temp": 6.1, "Hum": 75.65, "Baro": 937.15, "BaroSLP": 1011.1500000000001, "Alt": 668.75, "SBattery": 3747.75, "TimeStamp": "2025-03-15T17:50:30Z", "Count": 2 }, { "hh": 16, "Temp": 5.016666666666667, "Hum": 76.91666666666667, "Baro": 936.1233333333333, "BaroSLP": 1010.9499999999999, "Alt": 666.9833333333333, "SBattery": 3750.1666666666665, "TimeStamp": "2025-03-15T16:55:20Z", "Count": 3 } ]

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.