如何限制每个用户 ID 一行

Posted

技术标签:

【中文标题】如何限制每个用户 ID 一行【英文标题】:How to limit one row per user id 【发布时间】:2017-08-28 17:04:35 【问题描述】:

我有一张名为employeetimesheets 的表格:

empsheet_id|employee_id|timesheet_status|last_update

该表允许经理访问所有员工时间表。一名员工可以有多个考勤表。我想仅显示每位员工的最新条目。我读过in the manual 我必须用inner join 编写一个groupwise-maximum 子查询和left join,但我不确定如何在这里进行。

到目前为止,这是我的查询:

$sqlempsheets="SELECT * FROM employeetimesheets JOIN employees ON employeetimesheets.employee_id=employees.employee_id WHERE employeetimesheets.timesheet_status='Pending Approval'";
$resultempsheets=mysqli_query($db,$sqlempsheets);

【问题讨论】:

【参考方案1】:

试试这个:

select *
from employeetimesheets t
join (
    select employee_id,
        max(empsheet_id) as empsheet_id
    from employeetimesheets
    group by employee_id
    ) t2 on t.employee_id = t2.employee_id
    and t.empsheet_id = t2.empsheet_id
join employees e on t.employee_id = e.employee_id
where t.timesheet_status = 'Pending Approval';

或者使用left join:

select t.*, e.*
from employeetimesheets t
left join employeetimesheets t2 on t.employee_id = t2.employee_id
    and t.empsheet_id < t2.empsheet_id
join employees e on t.employee_id = e.employee_id
where t.timesheet_status = 'Pending Approval'
    and t2.employee_id is null;

【讨论】:

以上是关于如何限制每个用户 ID 一行的主要内容,如果未能解决你的问题,请参考以下文章

inotify FD - 为啥限制每个用户 id 而不是每个进程?

将内存或进程或线程池资源限制到弹簧控制器

CSP-201403

Codevs

1076 排序

CCF - 201403-1 - 相反数