[英]CosmosDB - return list with Top 1 of each item in a list with many records
我有下表:
Id | Plate | RecordedAt
对于每个不同的板块,可以有 N 条记录。
我正在努力处理以下查询:
SELECT TOP 1 *
FROM table
WHERE table.Plate IN ('plate1', 'plate2', 'plate3')
ORDER BY c.Recordedat DESC
问题是此查询仅返回 1 条记录,其中包含最后一个Recordedat
项目。
我需要列表中每个项目的最后一个Recordedat
。
有没有办法只用一个查询来实现这一目标?
例如对于以下记录:
Id | Plate | RecordedAt
1 | Plate1 | 2021/09/26 6:53:06
3 | Plate2 | 2021/09/25 7:45:10
4 | Plate3 | 2021/09/23 02:10:42
5 | Plate1 | 2021/09/25 02:40:02
6 | Plate2 | 2021/09/26 15:14:02
7 | Plate1 | 2021/09/26 01:02:04
8 | Plate3 | 2021/09/26 16:02:20
9 | Plate1 | 2021/09/24 05:02:20
10 | Plate2 | 2021/09/24 04:03:02
我需要返回:
[
{
"Plate1":"2021/09/26 15:14:02"
},
{
"Plate2":"2021/09/26 15:14:02"
},
{
"Plate3":"2021/09/26 16:02:20"
},
]
在 Cosmos DB 中无法执行此类查询。
您将需要具体化每个板块的聚合或值,然后对其进行查询。
您可以使用GROUP BY
对盘子进行分组。 然后您可以在其他列上使用聚合函数。 在这种情况下,您需要最后一个/最高日期,以便可以使用MAX
:
SELECT c.Plate, MAX(c.Recordedat) AS Recordedat
FROM c
WHERE c.Plate IN ('plate1', 'plate2', 'plate3')
GROUP BY c.Plate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.