Как сгруппировать по дате создания в колонке? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь получить промежуточные итоги, используя 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

Что я должен изменить, чтобы получать промежуточные итоги за каждый день?

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю, что нашел решение сам ...

Приведенный выше метод дает следующий 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;

Проблема здесь в том, что, хотя я выбираю "createAt" в качестве псевдонима для усеченного значения из столбца созданного, Sequelize по-прежнему ссылается на столбец созданного в таблице, а не псевдоним.

Я обошел эту проблему, переименовав псевдоним в "creatOn", например

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']],

в предложении order вместо использования псевдонима. Это связано с тем, что Sequelize постоянно менял заглавные буквы столбца псевдонимов в предложении order на «creationon» ...

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...