2017-02-23 48 views
0

我写了一个SQL查询,并试图使其适应Sequelize,但无法弄清楚如何在同一张表上创建关联。下面是SQL:内部加入同一张表Sequelize

SELECT t1.* 
FROM `configurations` t1 
INNER JOIN 
(
    SELECT max(configuration_start) maxConfigStart, pb_id 
    FROM `configurations` 
    WHERE 
     active = 1 
     AND DATE(configuration_start) <= DATE(NOW()) 
    GROUP BY `pb_id` 
) t2 
    ON t1.`pb_id` = t2.`pb_id` 
    AND t1.`configuration_start` = t2.`maxConfigStart` 
WHERE t1.`active` = 1 
ORDER BY t1.`configuration_start` DESC 

下面是模型定义:

configurations = sequelize.define 'configurations', { 
    id: 
    type: Sequelize.INTEGER 
    primaryKey: true 
    autoIncrement: true 
    configuration_name: Sequelize.STRING 
    pb_id: Sequelize.INTEGER 
    device_id: Sequelize.STRING 
    event_id: Sequelize.INTEGER 
    configuration_start: Sequelize.DATE 
    configuration_end: Sequelize.DATE 
    utc_offset: Sequelize.STRING 
    watermark_id: Sequelize.INTEGER 
    ipad_config_id: Sequelize.INTEGER 
    screen_group_id: Sequelize.INTEGER 
    color_table_id: Sequelize.INTEGER 
    animated_overlay_group: Sequelize.INTEGER 
    created: Sequelize.DATE 
    updated: Sequelize.DATE 
    active: Sequelize.INTEGER 
}, { 
    timestamps: false, 
    scopes: { 
    currentConfigTimes: { 
     attributes: ['pb_id', [sequelize.fn('max', sequelize.col('configuration_start')), 'configuration_start']] 
     where: 
     active: 1 
     configuration_start: 
      lte: new Date() 
     group: ['pb_id'] 
    }, 
    currentConfigIds: { 
     attributes: ['pb_id', 'configuration_start', 'id'] 
     where: 
     active: 1 
     configuration_start: 
      lte: new Date() 
     order: [['configuration_start', 'DESC']] 
    } 
    } 
} 

任何帮助,有人可以提供将非常感激。本质上,我试图为每个pb_id获取最新的过去配置。也许有更好的方法来做到这一点?

+0

你SQL看起来没有问题,你不需要最后的地方......那么你的问题是什么? – SIDU

+0

我不知道如何在Sequelize中做到这一点。我可以在SQL中做到这一点,但不知道如何将其转移到我的ORM。 – tonestrike

回答

0

看来,这实际上不可能使用Sequelize目前。在花费大量时间与他们的文档试图了解这样做的最佳方式后,我来到this Github issue试图解决完全相同的问题。最好的解决方案是此时使用原始查询。