我正在处理一个包含Employee Complaint
EmployeeId
和ComplaintSeverity
列的表ComplaintByUser
。 ComplaintSeverity
有四个级别0,1,2和3.
所以表格看起来像这样,例子
ComplaintId|EmployeeId|ComplaintSeverity|usr_id
-----------------------------------
1 | 1 | 0 | 3
2 | 2 | 1 | 4
3 | 3 | 0 | 5
4 | 1 | 2 | 4
5 | 4 | 1 | 5
6 | 2 | 2 | 2
7 | 2 | 2 | 4
任何用户都可以投诉任何这些级别的员工
当客户端使用severitylevel
搜索为0时,
该行应该作为
ComplaintId|EmployeeId|ComplaintSeverity
----------------------------
3 | 3 | 0
表示severitylevel
为1,
ComplaintId|EmployeeId|ComplaintSeverity
----------------------------
5 | 4 | 1
表示severitylevel
为2,
ComplaintId|EmployeeId|ComplaintSeverity
----------------------------
4 | 1 | 2
6 | 2 | 2
EmployeeId
1已被2位severitylevel
0,2的用户投诉,但他的最高严重等级为2.因此,在搜索0级别时,不应显示1。
任何人都可以帮助我吗?
答案 0 :(得分:0)
您可以尝试以下查询。
SELECT *
FROM
(
SELECT cs.`EmployeeId`, MAX(cs.`ComplaintSeverity`) severity
FROM ComplaintSeverity cs
GROUP BY cs.`EmployeeId`
) csdata
WHERE csdata.severity=1
将1替换为您想要的严重性级别。
答案 1 :(得分:0)
在提交上一个答案后编辑了问题。因此,以下将更准确。
SELECT x.*
FROM my_table x
JOIN
( SELECT employeeid
, MAX(complaintseverity) severity
FROM my_table
GROUP
BY employeeid
) y
ON y.employeeid = x.employeeid
AND y.severity = x.complaintseverity
WHERE complaintseverity = 0 -- optional line
ORDER
BY employeeid;