gpt4 book ai didi

php - laravel 加入仅限制 2 行

转载 作者:行者123 更新时间:2023-11-30 23:44:21 24 4
gpt4 key购买 nike

所以我有这种查询,我像这样用最大日期/时间段进行分组

$table_data = App\salesreport::join(DB::RAW('(SELECT company_id, MAX(period) AS max_period FROM salesreport GROUP BY company_id ) latest_report'),function($join){
$join->on('salesreport.company_id','=','latest_report.company_id');
$join->on('salesreport.periods','=','latest_report.max_periods');
})->get()

它工作得很好,它可以将所有公司归为一个,然后只显示最新的一个 MAX(period)。然后我想对其进行更多调整,如果我不仅要展示最新的,还要展示每家公司的最新两个怎么样?所以每家公司将返回所有报告中最新的 2 份报告。

然后我想也许添加 LIMIT 2 会让它起作用所以我这样说

$table_data = App\salesreport::join(DB::RAW('(SELECT company_id, MAX(period) AS max_period FROM salesreport GROUP BY company_id ) latest_report'),function($join){
$join->on('salesreport.company_id','=','latest_report.company_id');
$join->on('salesreport.periods','<=','latest_report.max_periods');
$join->limit(2)
})->get()

但它没有任何效果,只显示所有周期 <= max_periods 的公司的所有报告。

为了让事情更清楚这里是我加入的表

这是我的销售报表

+----+------------+-------+------------+
| id | company_id | price | periods |
+----+------------+-------+------------+
| 1 | A1 | 500 | 2016-07-12 |
| 2 | A2 | 540 | 2017-01-21 |
| 3 | A1 | 440 | 2017-01-19 |
| 4 | A1 | 440 | 2018-01-19 |
| 5 | A2 | 330 | 2016-01-12 |
| 6 | A2 | 333 | 2018-01-22 |
+----+------------+-------+------------+

然后使用上面的第一个查询然后我会得到这种表

+----+------------+-------+------------+
| id | company_id | price | periods |
+----+------------+-------+------------+
| 4 | A1 | 440 | 2018-01-19 |
| 6 | A2 | 333 | 2018-01-22 |
+----+------------+-------+------------+

所以我想要的就是得到这样一张 table

+----+------------+-------+------------+
| id | company_id | price | periods |
+----+------------+-------+------------+
| 4 | A1 | 440 | 2018-01-19 |
| 3 | A1 | 440 | 2017-01-19 |
| 6 | A2 | 333 | 2018-01-22 |
| 2 | A2 | 540 | 2017-01-21 |
+----+------------+-------+------------+

所以每家公司的最新 2 个.. 可能吗?只有一个请求?

最佳答案

使用 this trick :

App\salesreport::join(DB::RAW('(SELECT company_id, GROUP_CONCAT(periods ORDER BY periods DESC) grouped_periods FROM salesreport GROUP BY company_id ) latest_report'),function($join){
$join->on('salesreport.company_id','=','latest_report.company_id');
$join->whereBetween(DB::raw('FIND_IN_SET(`salesreport`.`periods`, `latest_report`.`grouped_periods`)'), [1, 2]);
})->get();

关于php - laravel 加入仅限制 2 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com