MqSql - 获取员工具有最大投诉严重性级别的行

时间:2016-06-17 06:37:28

标签: mysql

我正在处理一个包含Employee Complaint EmployeeIdComplaintSeverity列的表ComplaintByUserComplaintSeverity有四个级别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。

任何人都可以帮助我吗?

2 个答案:

答案 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;