CosmoDB查询组中count大于1的第一个记录



我正试图查询按日期排序并按id分区的每个组的第一个记录,我只需要具有重复id的记录。

这是样本数据

{"s_id": "123", "my_date": "2022-10-12", "a_value": 1 },
{"s_id": "123", "my_date": "2022-11-12", "a_value": 22},
{"s_id": "123", "my_date": "2022-11-13", "a_value": 23}, // should be in the output
{"s_id": "125", "my_date": "2022-10-20", "a_value": 2},
{"s_id": "125", "my_date": "2022-10-23", "a_value": 4},  // should be in the output
{"s_id": "241", "my_date": "2022-11-01", "a_value": 12},  
{"s_id": "242", "my_date": "2022-11-02", "a_value": 11}   

因此,输出应该只包含第3行和第5行,因为有多个s_id为123和125的记录。最后2行不应该出现在输出中,因为它们没有重复的s_id。

预期的结果

{"s_id": "123", "my_date": "2022-11-13", "a_value": 23},  
{"s_id": "125", "my_date": "2022-10-23", "a_value": 4} 

我试着做以下事情,但我得到了错误的a_value,因为它是

组的一部分
SELECT d.s_id, 
d.my_date, 
d.source, 
d.a_value 
FROM (SELECT c.s_id, 
MAX(c.my_date) AS my_date, 
MAX(c.a_value) AS a_value, 
COUNT(1) AS cnt
FROM c GROUP BY c.s_id) d
WHERE d.cnt > 1

我上面得到的问题是a_value与MAX不正确。另外,我搜索了一下,没有办法在同一个容器上做cosmo的连接。

欢迎任何帮助,谢谢,

您可以尝试使用EXISTS操作符与相关子查询如下:

SELECT s_id, my_date, a_value
FROM table_name T
WHERE NOT EXISTS
(
SELECT 1 FROM table_name D
WHERE D.s_id = T.s_id AND D.a_value > T.a_value
)
AND EXISTS
(
SELECT 1 FROM table_name D
WHERE D.s_id = T.s_id AND D.a_value <> T.a_value
)

第一个NOT EXISTS是只选择具有最大'a_value'的行,第二个EXISTS是确保有不止一行具有相同的s_id和不同的a_value。

最新更新