我有以下 json 结构
json1
{
name : Raju
Location : bangloor
_ts: 1705505722
}
json2
{
name : Ramu
Location : bangloor
_ts: 1705505725
}
json3
{
name : Ram
Location : bangloor
_ts: 1705505729
}
json4
{
name : sam
Location : kerala
_ts: 1705505830
}
json5
{
name : samual
Location : kerala
_ts: 1705505835
}
json6
{
name : ramya
Location : kerala
_ts: 1705505838
}
我需要按位置对每个项目进行分组,并从每个组中获取最新的 json(基于具有完整 json 内容的创建日期)
预期输出:
[{
name : Ram
Location : bangloor
_ts: 1705505729
},
{
name : ramya
Location : kerala
_ts: 1705505838
}]
我已尝试以下查询,但它不起作用
SELECT *
from c
JOIN (
SELECT c1.Location, MAX(c1._ts) AS MaxTimestamp
FROM c c1
GROUP BY c1.Location) maxTimestamps
WHERE c.Location = maxTimestamps.Location
AND c._ts = maxTimestamps.maxTimestamp
我认为 Cosmos DB 中不直接支持非相关子查询。我们可以通过自连接在单个查询中完成此操作吗?
正如 Martin Smith 在评论中建议的那样,您可以
concatenate
和 timestamp
一起定位,下面的答案中使用了相同的方法:
SELECT c.Location,
MAX(CONCAT(TimestampToDateTime(c._ts*1000),' ',c.name))
AS timeName
FROM c WHERE c.Location IN ('kerala', 'bangloor') GROUP BY c.Location
上面的查询中使用 CONCAT()
函数将位置与相关时间戳连接起来,MAX()
函数用于从连接值中检索最大值。
输出:
[
{
"Location": "kerala",
"timeName": "2024-01-22T05:22:10.0000000Z ramya"
},
{
"Location": "bangloor",
"timeName": "2024-01-22T05:19:07.0000000Z Ram"
}
]