按父属性找到的日期对象查询查询组

时间:2016-10-27 13:56:16

标签: mysql node.js express group-by sequelize.js

所以,我使用sequelize和mysql实例,我有这个层次结构:一个任务有n个图像,还有n个元数据键值对。 我希望根据userId任务列获取所有图像,然后按照' createdAt'考虑到当天的列,因为正常的groupby将是毫无意义的(没有对象共享相同的日期时间)。我做了很多测试尝试分组,最后我使用了这个查询,结果很糟糕(我有一个任务的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);
})

1 个答案:

答案 0 :(得分: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,也许它也更容易为您提供帮助。

祝你好运。