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
ごとに最新の過去の設定を取得しようとしています。多分もっと良い方法がありますか?
あなたはSQLに問題はなく、最後のWHEREは必要ありません....あなたの問題は何ですか? – SIDU
Sequelizeでこれを行う方法がわかりません。私はそれをSQLでうまくやることができますが、ORMに転送する方法はわかりません。 – tonestrike