显示两个日期之间的所有日期数据;如果特定日期不存在任何行,则使用sequelize在所有列中显示零

时间:2018-09-13 05:57:32

标签: mysql node.js orm sequelize.js

我陷入了逻辑或语法问题,我从堆栈中尝试了很多东西。但是我没有得到关于我的问题的确切解决方案。

问题

我有带有以下列的abc表

╔════╦═════════╦═════════════════════╦═══════╗
║ id ║ success ║ transactionTime     ║ value ║
╠════╬═════════╬═════════════════════╬═══════╣
║ 1  ║ 1       ║ 2018/09/12 10:50:00 ║ 10    ║
╠════╬═════════╬═════════════════════╬═══════╣
║ 2  ║ 0       ║ 2018/09/13 10:58:00 ║ 12    ║
╠════╬═════════╬═════════════════════╬═══════╣
║ 3  ║ 1       ║ 2018/09/13 10:55:00 ║ 34    ║
╚════╩═════════╩═════════════════════╩═══════╝

我想要显示两个日期之间的所有数据;如果特定日期不存在任何行,则使用sequelize在所有列中显示零;

  

我了解SQL,但不了解如何使用Sequilze ORM

我已经尝试过了

startDate = moment().subtract(7, 'days').format('YYYY-MM-DD 00:00:00');
endDate = moment().format('YYYY-MM-DD 23:59:59');  
const Record = await db.abc.count({
        where: {
         transactionTime: {
            $between: [
              startDate, 
              endDate,
            ],
          },
        },
        attributes: [[sequelize.fn('DATE_FORMAT', sequelize.col('transactionTime'), '%Y-%m-%d'), 'day']],
        group: [sequelize.fn('DAY', sequelize.col('transactionTime'))],
      });

我正在获得以下输出

day              Count
2018/09/12        1
2018/09/13        2

预期输出:

day              Count
2018/09/08        0
2018/09/09        0
2018/09/10        0
2018/09/11        0
2018/09/12        1
2018/09/13        2

帮帮我,我是续集新手。

0 个答案:

没有答案