【问题标题】:Laravel Query - Only the top amount for each day of the weekLaravel 查询 - 只有一周中每一天的最高金额
【发布时间】:2019-05-04 10:39:40
【问题描述】:

我正在尝试创建一个函数来显示一周中每一天的最佳日子。

所以说我们有:

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DATE_FORMAT(orders.paid_at, \'%W\') AS week_day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC');

所以它最终会输出

2019-04-29, Monday, £500
2019-01-01, Tuesday, £700
2019-02-06, Wednesday, £400
2019-01-03, Thursday, £600
2019-02-15, Friday, £200
2019-04-20, Saturday, £100
2019-03-17, Sunday, £600

我当前的查询选择每个星期一、星期二、星期三,并给出每次出现的金额。

我只想显示一周中每一天的表现最好的日期(给我们 7 行)。

有没有办法围绕这个查询包装一个查询来实现这个或其他方式?

【问题讨论】:

  • 您的查询对我来说似乎很好。我自己测试过,它每天只返回 7 个结果。确保您的 $this->from$this->to 变量不仅仅是空字符串,而是代表日期,例如“2019-05-04”或您将其存储在数据库中的任何格式。
  • 问题是它每个星期一都会返回,例如,我只想要一周中的每一天,但数量最多的一天
  • 正如我所说,如果你的 whereBetween 使用例如当前周:['2019-04-29', '2019-05-05'] 那一周只包含一个星期一,所以它不可能给你两天星期一。而且,您正在计算每天的金额的总和,因此如果您只想要周一支付的最高金额,那么您应该删除总和并获得金额。
  • 抱歉不清楚。它必须包括多个星期一,因为目的是显示该期间星期一产生的最多收入。
  • 好的,你能用一个简单的输入来编辑你的问题吗?意思是日期,预期的输出是什么?因为至少对我来说仍然不清楚。

标签: laravel eloquent


【解决方案1】:

我设法产生了预期的结果,我在选择中添加了一个额外的列,以便能够在最后按预期对日期进行排序。解决方案不完全是 mysql 之一,但我相信使用收集方法很容易完成。所以请试试这个并告诉我。

Order::join('order_items', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.paid', 1)
    ->groupBy('orders.paid_at')
    ->select(DB::raw(
        'orders.paid_at,
        DAYNAME(orders.paid_at) AS week_day, // this function gives the same as formatting
        WEEKDAY(orders.paid_at) as day,
        SUM(order_items.amount) AS amount'
    ))->orderBy('amount', 'DESC')
      ->get()
      ->unique('week_day')->sortBy('day'); // this two will give the expected result

【讨论】:

  • 它将它减少到一周中的 7 天,但是按数量 desc 的顺序似乎没有受到独特功能的尊重,它似乎不是从顶部开始
  • 我已经开始工作了,payed_at 分组需要应用到它,所以它不是按订单的小时、分钟和秒分组
  • 好吧,我不知道paid_at 字段,我以为它只是一个日期,而不是一个日期时间。如果它以某种方式有所帮助,我会很高兴。如果这很好,请考虑接受答案。
  • 接受!我认为长期不使用集合会很好,但它现在解决了这个问题。数据库中有 100 的数千行,所以我认为完全 mysql 可能更有效。
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多