You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel QueryBuilder已有select语句中插入GREATEST函数查询多列最大日期

解决方案

你原有写法的问题是在DB::raw中嵌套了独立的SELECT子查询,属于冗余逻辑,且没有和当前查询的行做关联,导致end字段无法正常返回。

修正后代码

$ses = DB::table('ses_contracts')
    ->join('ses_worker','ses_contracts.id','ses_worker.ses_id')
    ->join('corporates','corporates.id','ses_contracts.outsourcer')
    ->select([
        'corporates.corpname as outsourcer',
        'ses_contracts.outsourcer_manager_name as manager_name',
        'ses_worker.worker_name as worker_name',
        'ses_worker.sesnum1 as sesnum1',
        'ses_worker.sesnum2 as sesnum2',
        'ses_contracts.work_date1 as start',
        // 取6个日期列最大值的正确写法
        DB::raw('GREATEST(work_date1, work_date2, work_date3, work_date4, work_date5, work_date6) as end')
    ])
    ->get();

die($ses);

补充说明

  • 当前查询已经关联了ses_contracts表,不需要在字段表达式中额外加SELECT和from ses_contracts语句,数据库会自动对每一行的对应字段计算最大值
  • 如果你的6个日期字段存在NULL值,MySQL的GREATEST函数遇到NULL会直接返回NULL,建议对每个字段加IFNULL处理,示例:
    DB::raw("GREATEST(IFNULL(work_date1, '1970-01-01'), IFNULL(work_date2, '1970-01-01'), IFNULL(work_date3, '1970-01-01'), IFNULL(work_date4, '1970-01-01'), IFNULL(work_date5, '1970-01-01'), IFNULL(work_date6, '1970-01-01')) as end")
    

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:27:02