【问题标题】:Sequelize best practice for GROUP BY & CROSS JOIN with VariablesSequelize GROUP BY & CROSS JOIN with Variables 的最佳实践
【发布时间】:2020-04-13 09:07:39
【问题描述】:

我尝试创建此查询:http://sqlfiddle.com/#!9/2a746d/1 转换成 Sequelize 格式。

SELECT location, parameter, datetime, value
FROM (
   SELECT location, parameter, datetime, value,
          @seq := IF(@loc = location, @seq + 1,
                     IF(@loc := location, 1, 1)) AS seq
   FROM mytable
   CROSS JOIN (SELECT @seq := 0, @loc = '') AS vars
   ORDER By location, datetime desc, value desc) AS t
WHERE t.seq = 1   

我尝试执行以下操作:

getLastPerCategory = function(callback) {
Model.findAll({
  attributes: [
    [sequelize.fn('MAX', sequelize.col('location')), 'location'],
    [sequelize.fn('MAX', sequelize.col('parameter')), 'parameter'],
    [sequelize.fn('MAX', sequelize.col('datetime')), 'datetime'],
    [sequelize.fn('MAX', sequelize.col('value')), 'value'],
  ],
  group: ['location'],
  raw: true,
}).then(results => callback(results));
};

但它给出的值不正确。 我的目标是获取按“位置”分组的最后一个对象。

位置(1,2,3,4)。

提前致谢, 斯万特

【问题讨论】:

    标签: javascript mysql sql sequelize.js


    【解决方案1】:

    不确定这是否是最佳方式,但我通过原始查询而不是以 Sequelize 格式进行查询来解决此问题。

    const query = 'THE QUERY'
    sequelize.query(query, 
      { 
        model: Model, mapToModel: true,
        nest: true,
        raw: true,
        type: sequelize.QueryTypes.SELECT 
      }).then(results => callback(results));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多