Laravel - 根据唯一日期选择行

时间:2017-06-13 06:24:36

标签: php sql laravel

我需要为Laravel中的每个唯一日期选择一行。我有工作SQL查询,但我无法在Laravel中工作。

工作查询是:

SELECT * 
FROM `stats` 
WHERE id IN (SELECT MAX(id) FROM `stats` GROUP BY DATE(created_at))

5 个答案:

答案 0 :(得分:1)

这是您在laravel中的查询

DB::table('stats')
    whereIn('id', function($query){
    $query->select(DB::RAW('max(id)'))
    ->from('stats')
    ->groupBy(DB::RAW('DATE(created_at)'))
})->get();

答案 1 :(得分:0)

试试这个:

$sql = "SELECT * FROM stats WHERE id IN (SELECT MAX(id) FROM stats GROUP BY 
        DATE(created_at))";
$result = DB::select($sql);

答案 2 :(得分:0)

我不太了解Laravel,但这里有一个查询,可以告诉你你需要什么:

SELECT t1.*
FROM stats t1
INNER JOIN
(
    SELECT created_at, MAX(id) AS max_id
    FROM stats
    GROUP BY created_at
) t2
    ON t1.created_at = t2.created_at AND
       t1.id         = t2.max_id

答案 3 :(得分:0)

你可以用2种不同的方式进行laravel查询 1.雄辩:只需为统计表创建模型并在查询下面写下

     Stats::whereIn('id', function($q){
      $q->select(DB::RAW('max(id)'))
      ->from('stats')
      ->groupBy(DB::RAW('DATE(created_at)'))
     })->get();
  1. 按表名称呼叫

    DB::table('stats')->whereIn('id', function($q){
      $q->select(DB::RAW('max(id)'))
     ->from('stats')
     ->groupBy(DB::RAW('DATE(created_at)'))
    })->get();  
    

答案 4 :(得分:0)

您可以在laravel中轻松地执行whereRaw,以使语法与标准

保持一致

$ results = State :: whereRaw('id IN(SELECT MAX(id)FROM stats GROUP BY DATE(created_at))') - > get();

注意:State是App \ State Model 这将完成这项工作