2016-10-27 6 views
-1

私はmysqlインスタンスでsequelizeを使用しています。この階層はタスクにはn個の画像とメタデータのキー値のペアがあります。 タスクのuserId列に基づいてすべてのイメージを取得し、その後、通常のgroupbyが無意味なので(オブジェクトが同じdatetimeを共有しないため)、その日を考慮して 'createdAt'列でグループ化します。私はグループ化を試みるために多くのテストを行いましたが、このクエリを使用すると結果が悪化しました(私はタスクのために11イメージがあり、それは4を取得します)。正直なところ、私は何が間違っているのか分かりません。あなたはどなたですか?親プロパティで見つかった日オブジェクトごとにクエリをグループ化する

var userId = security.utils.getKeycloakSubject(req); 
var where = { 
    userId: userId 
}; 
db.image.findAll({ 
    include: [{ 
     model: db.task, 
     include: [{ 
      model: db.metadata, 
      as: 'metadata' 
     }], 
     where: where 
    }], 
    group: [db.Sequelize.fn('DAY', db.Sequelize.col('image.createdAt'))] 
}).then(function (images) { 
    return res.json(images); 
}, function (error) { 
    return res.status(500).json(error); 
}) 

答えて

0

私はあなたの質問を見ても、これを見つけた:Sequelize grouping by date, disregarding hours/minutes/seconds それは、DAY(createdAt)は、あなたと似グループについての質問がある これは、コードスニペットです。

そして、GROUP BY DAY(の私の解決策は)のように見えている:

item.findAll({ 
     attributes: 
     [[sequelize.fn('DATE_FORMAT', sequelize.col('TimeStamp'), '%H'), 'dates']], 
     group: [sequelize.fn('DAY', sequelize.col('TimeStamp'))] 
     }). 
     then(function(result){console.log(result) 
     }). 
     catch(function(error){}).catch(function(error) { 
      console.log(error); 
     }); 

ので、生のSQLが好き:SELECT DATE_FORMAT('TimeStamp', '%H') as 'dates' FROM tableName GROUP BY DAY('TimeStamp');

が、それはあなたのお役に立てば幸い、またはあなたは私たちにあなたがしたいSQLを表示することができます使用すると、多分あなたを助ける方が簡単かもしれません。

幸運。

関連する問題