Laravel 5 如何使用Laravel查询生成器从联合结果中获取最小值或最大值?

Laravel 5 如何使用Laravel查询生成器从联合结果中获取最小值或最大值?,laravel-5,Laravel 5,我想从union表中获取一个最小值 作为MySQL查询,如下所示 SELECT MIN(PromisedDate) FROM (SELECT PromisedDate FROM JobWorkOrder WHERE `PromisedDate` IS NOT NULL UNION SELECT ScheduledDate AS PromisedDate FROM JobPhase WHERE `ScheduledDate` IS NOT NULL) ScheduledTable

我想从union表中获取一个最小值

作为MySQL查询,如下所示

SELECT MIN(PromisedDate) 
FROM (SELECT PromisedDate FROM JobWorkOrder WHERE `PromisedDate` IS NOT NULL
    UNION
    SELECT ScheduledDate AS PromisedDate FROM JobPhase WHERE `ScheduledDate` IS NOT NULL) ScheduledTable;
$JobPhase = JobPhase::where('ScheduledDate', '<>', null)
    ->select('ScheduledDate AS PromisedDate');

$minDate = JobWorkOrder::where('PromisedDate', '<>', null)
    ->select('PromisedDate')
    ->union($JobPhase)
    ->min('PromisedDate');
此查询的结果是JobWorkOrder和JobPhase表中PromisedDate和ScheduledDate的最小值

因此,我构建了一个如下所示的Laravel查询

SELECT MIN(PromisedDate) 
FROM (SELECT PromisedDate FROM JobWorkOrder WHERE `PromisedDate` IS NOT NULL
    UNION
    SELECT ScheduledDate AS PromisedDate FROM JobPhase WHERE `ScheduledDate` IS NOT NULL) ScheduledTable;
$JobPhase = JobPhase::where('ScheduledDate', '<>', null)
    ->select('ScheduledDate AS PromisedDate');

$minDate = JobWorkOrder::where('PromisedDate', '<>', null)
    ->select('PromisedDate')
    ->union($JobPhase)
    ->min('PromisedDate');

如何构建Laravel查询?

从子查询中选择
min
字段:

$JobPhase = JobPhase::where('ScheduledDate', '<>', null)
    ->select('ScheduledDate AS PromisedDate');

$sub = $JobWorkOrder = JobWorkOrder::where('PromisedDate', '<>', null)
    ->select('PromisedDate')
    ->union($JobPhase);

$minDate = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery())
    ->min('PromisedDate');
$JobPhase=JobPhase::where('ScheduledDate','',null)
->选择('ScheduledDate AS PromisedDate');
$sub=$JobWorkOrder=JobWorkOrder::where('PromisedDate','',null)
->选择(“承诺人”)
->工会(就业阶段);
$minDate=DB::table(DB::raw(“({$sub->toSql()})作为sub”))
->合并绑定($sub->getQuery())
->min(“承诺人”);

另请参见:

您可以从get()函数结果中获取min。 只需在查询中添加一个get()函数

$JobPhase = JobPhase::where('ScheduledDate', '<>', null)
    ->select('ScheduledDate AS PromisedDate');

$minDate = JobWorkOrder::where('PromisedDate', '<>', null)
    ->select('PromisedDate')
    ->union($JobPhase)
    ->get()
    ->min('PromisedDate');
$JobPhase=JobPhase::where('ScheduledDate','',null)
->选择('ScheduledDate AS PromisedDate');
$minDate=JobWorkOrder::where('PromisedDate','',null)
->选择(“承诺人”)
->工会(就业阶段)
->得到()
->min(“承诺人”);
然后你会得到一个最小值