【问题标题】:Get Last n Months Data Group by Week - Laravel按周获取最近 n 个月的数据组 - Laravel
【发布时间】:2017-08-06 23:24:46
【问题描述】:

我试图在 Laravel 中按周过滤过去 4 个月的数据。这是我目前拥有的代码:

$analytics =
        Data::select([
            DB::raw('WEEK(p_date_time) AS week'),
            DB::raw('COUNT(id) AS count'),
        ])
            ->where('p_id', $p_id)
            ->where('p_date_time', '>=', Carbon::now()->subMonth(4))
            ->groupBy('week')
            ->orderBy('week')
            ->get()
            ->toArray();

此代码为我提供了 52 个基于 1 整年数据的结果(因为我使用的是 WEEK)。但我需要过去 4 个月的大约 17 个结果。

我可以通过收集每一天然后添加过去 4 个月的 7 天数据作为块来实现这一点,但是我如何仅使用查询来做到这一点?

谢谢。

【问题讨论】:

  • 您的代码应该没问题,它将返回 4 个月前的数据。我测试您的查询并返回预期结果。你能在你的例子中提供你的返回数组吗?你的p_date_timedate 还是timestamp 在你的数据库中的格式?
  • @martiendt,目前 p_date_time 是日期,它成功地为我的其他查询返回数据。这是我得到的数据: [{"week":1,"count":1},{"week":2,"count":1},{"week":3,"count":12} ,{"week":8,"count":14},{"week":9,"count":274},{"week":46,"count":2},{"week":47, "count":2},{"week":48,"count":1},{"week":49,"count":3},{"week":50,"count":3},{ "week":51,"count":2},{"week":52,"count":3}] 我在这里也很困惑。通常 WEEK 返回过去 1 年的数据。但是我通过 Carbon::now()->subMonth(4) 设置了 4 个月的时间限制。那么它如何返回超过 17 周的数据呢?
  • hmm,我认为需要更多调试,尝试删除DB::raw('WEEK(p_date_time) AS week'),以便我们可以清楚地看到您选择的日期

标签: php mysql laravel laravel-5.4 laravel-eloquent


【解决方案1】:

可能只是您的 Carbon 查询中的一个错字。将subMonth(4) 更改为subMonths(4)。带's'。

【讨论】:

  • 无论我使用 subMonth(4) 还是 subMonths(4),它都会返回相同的值,
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 2020-09-17
  • 2016-12-19
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多