问题: 我有一个表,其中有几行代码相同但日期不同,我也有一个查询:
SELECT * FROM movies WHERE CODE IN ('action', 'comedy')
问题: 我如何返回列表中具有最新日期FOR EACH代码的行并将其限制为1,因为可能存在重复项:
因此它仅返回ID 1和4。
类似
SELECT * FROM movies WHERE CODE IN ('action', 'comedy') DESC LIMIT 1
但对于每个代码。
谢谢。
答案 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" }})