我正在使用laravel 5,我对SQL有疑问 有记录员工职能变化的表。
我只需要最新的功能,所以我想知道"组使用"。 但即使我得到最新的日期,我也无法得到相应的数据。
最接近我想要的是这样的
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();
感谢您的帮助
答案 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 ;