【问题标题】:SQL group by month in Laravel selectRawLaravel selectRaw中按月分组的SQL
【发布时间】:2021-12-04 18:52:21
【问题描述】:

我正在尝试根据我的数据库中的 created_at 列按各种格式(例如小时、日、月和年)对数据进行分组,我总是需要返回一个有效的日期并且在该部分遇到问题。

以下为我提供date 的有效日期:

User::selectRaw('DATE(created_at) as date, COUNT(*) as total')->groupBy('date')->where('created_at', '>=', \Carbon\Carbon::now()->subWeeks(4))->whereNull('email_verified_at')->get();

但是如果我想按月分组,date 就变成了10,我该如何更改呢?

User::selectRaw('MONTH(created_at) as date, COUNT(*) as total')->groupBy('date')->where('created_at', '>=', \Carbon\Carbon::now()->subWeeks(4))->whereNull('email_verified_at')->get();

【问题讨论】:

  • 它位于哪个数据库之上?每个 DBMS 都有不同的日期语法。 (MYSQL8、MYSQL5.X、Oracle、MS SQL Server、PostgreSQL 等)

标签: php sql laravel


【解决方案1】:

您已经选择了月份,为什么您希望收到完整的日期?

当你按月分组时,这意味着所有年份、日子......所以无论如何都有一个完整的日期是没有意义的(我确实看到了你的情况,但即使这可能包括 2 个不同的年份)

但是你可以有这样的东西,它会给你第一个找到的行的日期

User::selectRaw('MONTH(created_at) as month, DATE(created_at) as date,  COUNT(*) as total')
->groupBy('month')
->where('created_at', '>=', \Carbon\Carbon::now()->subWeeks(4))
->whereNull('email_verified_at')->get();

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-11-28
    • 2021-09-28
    • 2018-08-26
    • 2011-07-21
    相关资源
    最近更新 更多