POSTGRES-WHERE IN

时间:2019-05-29 20:20:19

标签: sql postgresql greatest-n-per-group

问题: 我有一个表,其中有几行代码相同但日期不同,我也有一个查询:

SELECT * FROM movies WHERE CODE IN ('action', 'comedy')

问题: 我如何返回列表中具有最新日期FOR EACH代码的行并将其限制为1,因为可能存在重复项:

enter image description here

因此它仅返回ID 1和4。

类似

SELECT * FROM movies WHERE CODE IN ('action', 'comedy') DESC LIMIT 1

但对于每个代码

谢谢。

2 个答案:

答案 0 :(得分:1)

在Postgres中,使用DISTINCT ON

SELECT DISTINCT ON (CODE) m.*
FROM movies m
WHERE m.CODE IN ('action', 'comedy')
ORDER BY m.CODE, m.start_date DESC;

DISTINCT ON是Postgres扩展名。对于括号中的表达式的值的唯一组合,它返回一行包含一行的结果集(在这方面像GROUP BY键)。特定的行由ORDER BY子句确定。唯一键排在最前面,其余键定义“哪个”行。

答案 1 :(得分:1)

db.collection.find({"field":{ $regex: /(bon[^\s].+)/, $options: "si" }})