【问题标题】:Get min(date), max(date) with group by eloquent laravel用 eloquent laravel 分组获取 min(date), max(date)
【发布时间】:2019-06-25 16:48:03
【问题描述】:

此查询用于获取分组依据/唯一的日期值最高的其他数据。在这里,我使用 unique 代替 group by。
我的问题是如何使用 group by/unique 获取 min(date) 和 max(date)。 分组依据/唯一用于数据集表的日期字段。
我已经搜索过这个但没有得到确切的解决方案,即如何在 laravel eloquent 中使用 group by/unique 获取最大和最小日期。
在表结构中,一个代码有多个条目,所以这里我使用 group by/unique 来获取代码的一条记录。

可以有多个日期,例如 02-01-2003、01-03-2007、01-01-2019、01-07-2018... 等,代码相同/不同。如果我用代码分组,那么每个代码都有一条记录。所以在这里我想选择最大日期 [01-01-2019] 和最小日期 [02-01-2003]。

提前致谢。

控制器:

$datasets = Dataset::where('user_id', $user_id)
          ->orderBy('date','desc')
          ->get(['code', 'access','user_id','date'])
          ->unique('code');

【问题讨论】:

  • 如果是我,我会先得到一个有效的查询,然后转到 laravel
  • 感谢您的评论。我没有创建 mysql 查询,因为 Dataset 是 mongodb 数据库的集合。

标签: php mysql database laravel


【解决方案1】:

最后我得到了解决方案,但这不可能是确切的解决方案,但由于我是初学者并且没有得到确切的解决方案,所以我执行以下功能:

我创建了两个不同的查询来获取最小值和最大值。

$min_datasets = Dataset::where('user_id', $user_id)
      ->orderBy('date','asc')
      ->get(['code', 'access','user_id','date'])
      ->unique('code');


$max_$datasets = Dataset::where('user_id', $user_id)
      ->orderBy('date','desc')
      ->get(['code', 'access','user_id','date'])
      ->unique('code');

【讨论】:

    【解决方案2】:

    尝试像这样选择最大和最小日期:

    $datasets = Dataset::select('code', 'access','user_id', DB::raw('MAX(date) as max_date'),  DB::raw('MIN(date) as min_date'))
                        ->where('user_id', $user_id)
                        ->orderBy('date','desc')
                        ->get()
                        ->unique('code');
    

    【讨论】:

    • 我收到错误:Builder.php 第 353 行中的非法偏移类型
    【解决方案3】:
    $data = DB::table('table_name')->where('user_id',$user_id)
    ->select('code','access','user_id','date')
    ->whereBetween('date', [02-01-2003, 01-01-2019])
    ->groupBy('unique_column')
    ->get()
    

    【讨论】:

    • 感谢您的回答,但请阅读我的问题,我想在两个日期都获得最大值和最小值。例如,数据库中的最小日期是 02-02-2003,最大日期是 02-02-2019,那么我需要这两个日期。希望你能理解我的问题。
    • 确切的日期或有一个范围@Pragna
    • 我已经用示例编辑了我的问题。请检查
    • @Pragna 您可以将输入变量用于 mindate 和 maxdate,看看我的回答是否满足您的要求,或者我仍然错过了一些东西。谢谢
    • 在查询的结果中应该有 maxdate 和 mindate,就像在这个 mysql 查询中一样。 SELECT MIN(date) AS firstTravelDate, MAX(date) AS LastTravelDate FROM travel_data GROUP BY from, to;
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2022-07-16
    • 2020-06-18
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多