使用最新值分组的MySql
我有一个相当长的查询,它从各种来源收集数据,以创建一个关于正在检查的作业的报告 只需添加一点上下文: 我有一张“工作”表。这些工作中的每一项都与特定的区域和位置相关联,并根据工作的难度给予复杂性评级。每项工作都由一名主管进行检查,从10分中打分,然后输入系统。根据它获得的分数,它会被给予一个复杂度等级和一个需要再次检查的时间间隔。i、 e.分数越低,检查的频率越高 我正在编写一个查询,通过ID、名称等收集每个作业,然后获取上次检查、下次检查的时间以及当前分数,谁将其输入到系统中以及检查作业的实际主管 不幸的是,我的查询没有给出最新的值,而是最不新的值。除了“上次检查”字段(见下文)。为此,MAX()函数正在工作;但是,这与其他字段无关。 以下是表和查询的明细: 表1:工作使用最新值分组的MySql,mysql,sql,group-by,Mysql,Sql,Group By,我有一个相当长的查询,它从各种来源收集数据,以创建一个关于正在检查的作业的报告 只需添加一点上下文: 我有一张“工作”表。这些工作中的每一项都与特定的区域和位置相关联,并根据工作的难度给予复杂性评级。每项工作都由一名主管进行检查,从10分中打分,然后输入系统。根据它获得的分数,它会被给予一个复杂度等级和一个需要再次检查的时间间隔。i、 e.分数越低,检查的频率越高 我正在编写一个查询,通过ID、名称等收集每个作业,然后获取上次检查、下次检查的时间以及当前分数,谁将其输入到系统中以及检查作业的实际
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
表2:区域
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
表3:位置
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
表4:复杂性
Complexity_ID | Complexity_Label | Complexity_Interval_Days
1 Very Difficult 25
2 Difficult 35
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
表5:用户
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
表6:主管人员
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
表7:检查
Job_ID | Job_Name | Job_Area | Job_Location | Job_Complexity
1 MyJob 1 1 2
2 AnothJob 1 2 1
Area_ID | Area_Name
1 Area
Location_ID | Location_Area | Location_Name
1 1 MyLocation1
2 1 MyLocation2
User_ID | User_FirstName | User_LastName
1 Jane Doe
Supervisor_ID | Supervisor_FirstName | Supervisor_LastName
1 John Doe
2 Barry Sheen
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
当前查询
Complexity_ID | Complexity_Label | Complexity_Interval_Days
1 Very Difficult 25
2 Difficult 35
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行。从本质上说,我只关注每一份工作的最新信息,而没有显示之前检查过的任何信息
信息过载。。。非常感谢您的帮助,谢谢 左对齐SQL,很难读取…分组依据无效!将在较新的MySQL版本上引发错误(除非处于兼容模式),或者在较旧的MySQL版本上返回不可预知的结果。常规GROUP BY规则规定:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列,或者是集合函数的参数。左对齐SQL,很难读取…GROUP BY无效!将在较新的MySQL版本上引发错误(除非处于兼容模式),或者在较旧的MySQL版本上返回不可预知的结果。常规GROUP BY规则规定:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数。