【问题标题】:GroupBy and dateGroupBy 和日期
【发布时间】:2016-12-30 08:03:23
【问题描述】:

我正在尝试获取每天的预订量。我已经完成了这个学说要求:

   // prepare date for request
    $today = new DateTime('now');
    $lastMonth = new DateTime('-30 days');

    $qb
        ->select('r.reservationDate, sum(r.totalAmountNoTaxes) as totalAmountNoTaxes')
        ->where('r.companyId = :companyId')
        ->setParameter('companyId', $companyId)
        ->andWhere('r.reservationDate BETWEEN :month AND :today')
        ->setParameter('month', $lastMonth->format('Y-m-d'))
        ->setParameter('today', $today->format('Y-m-d'))
        ->orderBy('r.reservationDate', 'ASC')
        ->groupBy('r.reservationDate')
    ;

我得到了这样的结果(来自我的网络服务)

 {
      "reservationDate": "2016-12-21T07:41:12+0000",
      "totalAmountNoTaxes": "26150.30"
    },
    {
      "reservationDate": "2016-12-22T07:41:01+0000",
      "totalAmountNoTaxes": "230.00"
    },
    {
      "reservationDate": "2016-12-22T07:41:02+0000",
      "totalAmountNoTaxes": "21966.40"
    },
    {
      "reservationDate": "2016-12-23T07:40:52+0000",
      "totalAmountNoTaxes": "20407.05"
    },
    {
      "reservationDate": "2016-12-24T07:40:41+0000",
      "totalAmountNoTaxes": "4319.75"
    },
    {
      "reservationDate": "2016-12-24T07:40:42+0000",
      "totalAmountNoTaxes": "7261.20"
    },
    {
      "reservationDate": "2016-12-25T07:40:28+0000",
      "totalAmountNoTaxes": "14821.45"
    },
    {
      "reservationDate": "2016-12-26T07:40:16+0000",
      "totalAmountNoTaxes": "494.50"
    },
    {
      "reservationDate": "2016-12-26T07:40:17+0000",
      "totalAmountNoTaxes": "14541.25"
    },
    {
      "reservationDate": "2016-12-27T07:06:40+0000",
      "totalAmountNoTaxes": "25763.90"
    },
    {
      "reservationDate": "2016-12-28T05:37:43+0000",
      "totalAmountNoTaxes": "20595.70"
    }

问题是有时日期没有正确分组。例如,2016-12-22 分为 2。24、26 也是如此。

我该怎么办?

【问题讨论】:

  • 是的,日期存储为时间戳,因此在第 22 天,有 2 个条目及其按要求分组。您只能选择date_format(r.reservationDate,'%Y-%m-%d') as reservationDate,最后按reservationDate分组
  • 感谢回答,但我得到了 [Syntax Error] line 0, col 7: Error: Expected known function, got 'date_format'"
  • @Xero 看看我的答案并尝试一下。
  • 似乎其他人已经解决了这个问题,但是下一次,如果是我,我会摆脱所有教条的东西,只提供 MySQL 数据即。 meta.stackoverflow.com/questions/333952/…

标签: mysql symfony doctrine doctrine-query


【解决方案1】:

看起来您的数据库中有日期时间字段。 解决方案将按日期格式分组:

//
->groupBy('DATE_FORMAT(r.reservationDate, '%Y%m%d')')
//

但是DATE_FORMAT 没有在默认的学说包中实现,因此您必须添加beberlei/DoctrineExtensions,然后将相应的函数添加到您的学说包配置中,例如:

doctrine:
    dbal:
        ....
    orm:
        ....
        dql:
            string_functions:
                DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2022-10-25
    • 2017-08-09
    相关资源
    最近更新 更多