สมมติว่าฉันมีคอลเลกชัน 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
แต่ฉันรู้สึกว่าการวนซ้ำผู้ใช้ทั้งหมดของฉันและการเรียกใช้การค้นหาสำหรับแต่ละรายการอาจทำให้สิ้นเปลืองทรัพยากรมากและมีราคาแพงอย่างรวดเร็ว แต่ฉันไม่สามารถหาวิธีที่จะใช้งานได้
โปรดทราบว่าฉันจะมีคนจำนวนมากที่จะส่งข้อความจำนวนมากอย่างรวดเร็ว