Допустим, у меня есть коллекция Cosmos DB с SQL API, которая содержит список сообщений, отправленных людьми, с указанием их текущего настроения и отметкой времени получения сообщения. Люди могут отправлять сообщения, когда захотят.
В моей коллекции есть что-то вроде этого:
[
{
"PersonName": "John",
"CurrentMood": "Moody",
"TimeStamp": "2012-04-23T18:25:43.511Z",
"id": "25123829-1745-0a09-5436-9cf8bdcc95e3"
},
{
"PersonName": "Jim",
"CurrentMood": "Happy",
"TimeStamp": "2012-05-23T17:25:43.511Z",
"id": "6feb7b41-4b85-164e-dcd4-4e078872c5e2"
},
{
"PersonName": "John",
"CurrentMood": "Moody",
"TimeStamp": "2012-05-23T18:25:43.511Z",
"id": "b021a4a5-ee92-282c-0fe0-b5d6c27019af"
},
{
"PersonName": "Don",
"CurrentMood": "Sad",
"TimeStamp": "2012-03-23T18:25:43.511Z",
"id": "ee72cb36-4304-06e5-ed7c-1d0ff890de48"
}
]
Я хотел бы отправить запрос, который получает «текущее» настроение всех пользователей, отправивших сообщение (последнее сообщение, полученное для всех людей).
Это относительно легко сделать для каждого конкретного пользователя, комбинируя TOP 1 и ORDER BY.
SELECT TOP 1 *
FROM C
WHERE C.PersonName = "John"
ORDER BY C.TimeStamp
Но я чувствую, что перебор всех моих пользователей и выполнение запроса для каждого может быть очень расточительным по ресурсам и быстро стать дорогим, но я не могу найти способ, который будет работать.
Отмечу, что у меня скоро появится много людей, которые будут отправлять много сообщений.