具有最新值的MySql分组

时间:2017-03-29 12:53:43

标签: mysql sql group-by

我有一个很长的查询,它从各种来源收集数据,以创建一个关于正在检查的作业的报告。

只是添加一些上下文: 我有一份“工作”表。这些工作中的每一个都与某个区域和位置相关联,并根据工作的难度给出复杂性等级。每个工作由主管检查,得分为10,然后进入系统。根据它实现的分数,给出复杂度等级和再次检查的间隔。即较低的分数意味着检查的次数高于分数。

我正在编写一个查询,按ID,名称等收集每个作业,然后在最后一次检查时,下次检查它以及当前得分时,将其输入到检查工作的系统和实际主管。

不幸的是,我的查询并没有给我最近的值,而是最近的值。除了“Last_Checked”字段(见下文)。为此,MAX()函数正在工作;但是对于其他领域,这是不相关的。

以下是表格和查询的细分:

表1:工作

Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1        MyJob      1          1              2
2        AnothJob   1          2              1

表2:区域

Area_ID | Area_Name
1         Area

表3:地点

Location_ID | Location_Area | Location_Name
1             1               MyLocation1
2             1               MyLocation2

表4:复杂性

Complexity_ID | Complexity_Label | Complexity_Interval_Days
1               Very Difficult     25
2               Difficult          35

表5:用户

User_ID | User_FirstName | User_LastName
1         Jane             Doe

表6:主管

Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1               John                   Doe
2               Barry                  Sheen

表7:检查

Check_ID | Check_Job_ID | Check_Date | Check_Score | Check_User | Check_Supervisor
1          1              27-03-17     8             1            1
2          1              28-03-17     5             1            2
3          1              29-03-17     6             1            2

当前查询

SELECT
j.Job_ID,
a.Area_Name,
d.Location_Name,
j.Job_Name,
MAX(c.Checked_Date) as Last_Checked,
Date_Add(MAX(c.Checked_Date), interval r.Complexity_TimePeriod day) as Due_Date,
Datediff(Date_Add(MAX(c.Checked_Date), interval r.Complexity_TimePeriod day), Now()) as Due_Days,
c.Check_Score as Current_Score,
CONCAT(u.User_FirstName, ' ', u.User_LastName) as Entered_By,
CONCAT(s.Supervisor_FirstName, ' ', s.Supervisor_LastName) as Supervisor,
r.Complexity_Level

from Jobs_active j

left join pdc_admin.admin_areas a
on a.Area_ID = j.Job_area

left join pdc_admin.admin_Locations l
on l.Location_ID = j.Job_Location

left join Jobs_Checks c
on c.Check_Job_ID = j.Job_ID

left join pdc_admin.admin_users u
on u.user_id = c.Check_Person

left join Jobs_Complexity_config r
on r.Complexity_ID = j.Job_Complexity

left join admin_Supervisors s on
s.Supervisor_ID = c.Check_Supervisor

group by j.Job_ID

我想从中得到的结论是这样的:

Job_ID | Area_Name | Location_Name | Job_Name | Last_Checked | Due_Date | Due_Days | Current_Score | Entered_By | Supervisor | Complexity_Level
1        Area      | MyLocation1     MyJob      29-03-17       03-05-17   35         6               Jane Doe     Barry Sheen  Difficult

如您所见,结果显示最新字段(即已检查的分数/主管),但每个作业不显示超过1行。从本质上讲,我是关于每项工作的最新信息,而不会显示之前检查过的任何内容。

信息超载...感谢所有帮助!谢谢!

0 个答案:

没有答案