如何修改Sequelize查询,获取≤指定日期的最新daily_tip数据?
Sequelize 查询修改方案
需求:从daily_tip表中获取payload_date当天的数据,若当天无数据则获取历史最近日期的最新数据。当前查询代码无法满足逻辑,需要修改为等价于以下SQL的实现:
SELECT id,tip,date_for_show from daily_tip WHERE date_for_show <= '${payload_date}' ORDER BY date_for_show DESC LIMIT 1
当前存在问题的代码:
var db_data = await db.daily_tip({ "where": { "date_for_show": { [Op.lte]: payload_date } })
修改后的完整代码
var db_data = await db.daily_tip.findOne({ attributes: ['id', 'tip', 'date_for_show'], where: { date_for_show: { [Op.lte]: payload_date } }, order: [['date_for_show', 'DESC']], limit: 1 });
关键修改说明
- 使用
findOne方法:直接获取单条结果,比findAll配合limit更贴合需求场景 attributes字段:明确指定要查询的列,与原SQL的SELECT语句完全对应,避免返回冗余数据order配置:按date_for_show降序排序,确保符合条件的最新日期数据排在首位limit: 1:限制只返回第一条数据,实现原SQL的LIMIT 1逻辑- 补全了原代码中缺失的
where配置闭合括号
内容的提问来源于stack exchange,提问作者Chetan Pareek
相关产品推荐
相关产品推荐

