在这里,我希望根据字段中的最大日期来获取结果,因此,为了获得结果,我编写了如下查询
$latest_reports = Filelist::
select('report_type_id',DB::raw('filename,max(data_date) as latest_date'))
->where('access_id','=',$retailer_supplier_id->id)
->groupBy('report_type_id')
->orderBy('data_date','desc')
->get();这是我的桌子,请看一下
id access_id filename report_type_id data_date
1 16 filename1 6 2021-02-01
2 16 filename2 6 2021-01-01
3 16 filename3 6 2021-03-01
4 16 filename4 6 2021-04-01我得到的结果是这样的
id access_id filename report_type_id data_date
4 16 filename1 6 2021-04-01我想要得到这样的结果
id access_id filename report_type_id data_date
4 16 filename4 6 2021-04-01这里的第一行filename值是getting..how,用来解决这个问题
发布于 2021-03-26 13:36:16
更新:
$latest_reports = Filelist::select([
'report_type_id',
'access_id'
DB::raw('MAX(data_date) AS data_date'),
// here can be listed the other fields
])
->where('access_id', $retailer_supplier_id->id)
->groupBy('report_type_id')
->get();首字母:
我有类似的工作查询,就在那里我有"created_at“时间戳字段。不管怎样,我想这对你来说是可行的:
// assuming, that your table name is "filelist"
$latest_reports = Filelist::select(DB::raw('t.*'))
->from(DB::raw('(SELECT * FROM filelist ORDER BY data_date DESC) t'))
->groupBy('t.report_type_id')
->get();发布于 2021-03-26 13:43:32
我认为这是一个MySQL问题。您只指定了一列作为分组依据,但在选择列表中指定了多列,因此不能保证在其他非聚合列中显示的内容是合理的。请参考MySQL Handling of GROUP BY
在SQL中,我可能会这样重写查询:
select * from mytable
where data_date = (select max(data_date) from mytable)或
select * from mytable
order by data_date
limit 1取决于我的特殊需求(我不知道哪一个对你更好)
https://stackoverflow.com/questions/66811437
复制相似问题