gpt4 book ai didi

javascript - 如何按 createdAt 列的日期部分分组?

转载 作者:行者123 更新时间:2023-11-30 06:21:05 25 4
gpt4 key购买 nike

我正在尝试使用 Sequelize 获取一些小计,这就是我的查询的样子。

const getAllCustomerEarnings = async (customerAccountId) => {
return await customerEarnings.findAll({
attributes: [
[Sequelize.fn('SUM', Sequelize.col('amount')), 'amount'],
[Sequelize.fn('date_trunc', 'day', Sequelize.col('createdAt')), 'createdAt'],
],
where: {
[Op.and]: [
{customerAccountId: customerAccountId},
]
},
order: [['createdAt', 'ASC']],
group: 'createdAt'
})
}

但是,我得到的输出不是每天的小计。我实际上从表中获取了每条记录,时间部分设置为 00:00:000Z

为了获得每天的小计,我应该更改什么?

最佳答案

我想我自己找到了解决方案......

上面引用的方法产生下面的 SQL 查询

SELECT SUM("amount") AS "amount", date_trunc('day', "createdAt") AS "createdAt"
FROM "CustomerEarnings" AS "CustomerEarning"
WHERE ("CustomerEarning"."customerAccountId" = 5)
GROUP BY "createdAt"
ORDER BY "CustomerEarning"."createdAt" ASC;

这里的问题是,虽然我选择“createdAt”作为 createdAt 列的 chop 值的别名,但 Sequelize 仍然引用表中的 createdAt 列,而不是别名。

我通过将别名重命名为“createdOn”来解决这个问题,就像这样

const getAllCustomerEarnings = async (customerAccountId) => {
return await customerEarnings.findAll({
attributes: [
[Sequelize.fn('SUM', Sequelize.col('amount')), 'amount'],
[Sequelize.fn('date_trunc', 'day', Sequelize.col('createdAt')), 'createdOn'],
],
where: {
[Op.and]: [
{customerAccountId: customerAccountId},
]
},
order: [[Sequelize.literal('"createdOn"'), 'ASC']],
group: 'createdOn'
})
}

请注意,我还必须使用

[[Sequelize.literal('"createdOn"'), 'ASC']],

in order 子句,而不是仅仅使用别名。那是因为 Sequelize 一直在将 order 子句中别名列的大写更改为“createdon”...

希望这对某人有帮助。

关于javascript - 如何按 createdAt 列的日期部分分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com