如何选择最新数据?

时间:2017-06-27 08:51:23

标签: sql laravel

我正在使用laravel 5,我对SQL有疑问 有记录员工职能变化的表。

enter image description here

我只需要最新的功能,所以我想知道"组使用"。 但即使我得到最新的日期,我也无法得到相应的数据。

最接近我想要的是这样的

 DB::table('function_history')
->select(DB::raw('id_history,function_history.CUID,
              max(function_change_date)as time, id_function'))
   ->orderBy('time','desc') ->groupBy('CUID')->get();

enter image description here

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

您可以使用此SQL查询选择具有当前功能的所有员工:

SELECT 
    function_history.*
FROM
    function_history,
    (
        SELECT
            MAX(function_change_date) as last_change_date,
            CUID
        FROM
            function_history
        GROUP BY
            CUID
        ORDER BY function_change_date DESC
    ) tmp
WHERE
    function_history.CUID = tmp.CUID
    AND
    function_history.function_change_date = tmp.last_change_date

答案 1 :(得分:2)

确定。您只需要知道与具有最大日期的行对应的行。 纯SQL查询:

select 
    id_history, CUID, id_function, function_change_date
from 
    function_history t1 
    join 
    (select max(function_change_date) as maxdt from function_history group by CUID) t2 on t1.function_change_date = t2.maxdt

Laravel查询:

DB::table('function_history')->select('id_history', 'CUID', 'id_function', 'function_change_date')
            ->join(DB::raw('(select max(function_change_date) as maxdt from function_history group by CUID) temp'),
                'temp.maxdt', '=', 'date'
            )->get();

答案 2 :(得分:0)

我不确定您为什么要构建原始SQL查询和分组。如果您只想要特定CUID的最新功能更改,请按日期选择数据并订购:

DB::table('function_history')
    ->where('CUID', '=', $cuid)
    ->orderBy('function_change_date')
    ->get();

答案 3 :(得分:0)

Please use below query and convert into laravel format
SELECT 
  `CUID`,
  MAX(`function_change_date`) AS timechange,
  (SELECT 
    `id_function` 
  FROM
    `function_history` fc 
  WHERE fc.function_change_date = MAX(f.`function_change_date`)) AS id_function 
FROM
  `function_history` f 
GROUP BY CUID ;