繁体   English   中英

CosmosDB - 返回列表,其中包含许多记录的列表中每个项目的前 1 名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM