mysql:max date(),为单独的列汇总上一个日期的值

t9eec4r0  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(339)

我试图用这个数据集按公司名称总结每个员工的日期时间的最后值(总和)和每个公司名称的qa评分(平均值):

+--------------+-----------+------------------+-----------+----------+
| Company_Name | Wing_Name |    Date_Time     | Employees | QA_Score |
+--------------+-----------+------------------+-----------+----------+
| Company A    | Wing A    | 06/08/2018 13:00 |        82 | 3.5      |
| Company A    | Wing A    | 06/08/2018 13:01 |        83 | 3.6      |
| Company A    | Wing A    | 06/08/2018 13:02 |        84 | 3.7      |
| Company A    | Wing B    | 06/08/2018 13:00 |        50 | 4.1      |
| Company A    | Wing B    | 06/08/2018 13:01 |        51 | 4.2      |
| Company A    | Wing B    | 06/08/2018 13:02 |        52 | 4.3      |
| Company B    | Wing A    | 06/08/2018 14:00 |        82 | 3.6      |
| Company B    | Wing A    | 06/08/2018 14:01 |        85 | 3.7      |
| Company B    | Wing A    | 06/08/2018 14:02 |        88 | 3.8      |
+--------------+-----------+------------------+-----------+----------+

所需输出为:

+--------------+-----------+----------+
| Company_Name | Employees | QA_Score |
+--------------+-----------+----------+
| Company A    |       136 | 4        |
| Company B    |        88 | 3.8      |
+--------------+-----------+----------+

我已经成功地使用下面的代码按wing_name显示date_time的最后一个结果,但在我的一生中,无法为company_name计算出来,同时将wing_name从输出中排除。

SELECT * FROM table
WHERE (Wing_Name, Date_Time) IN
(SELECT Wing_Name, MAX(Date_Time) Date_Time FROM table GROUP BY Wing_Name)
AND `Company_Name` = "Company A";

现在,所需的输出应该是公司名称的员工总数和每个名称的结果,以及各个名称的qa\u得分的平均值,但汇总在公司名称下
所需输出遵循以下逻辑:
a公司和wing a员工的最后日期时间值为84。
a公司和b公司员工的最后日期时间值为52。
截至上一个日期和时间检索,a公司有84+52名员工(136人)。
公司a和wing a的qa评分的最后日期时间值为3.7。
a公司和b公司qa评分的最后日期时间值为4.3。
a公司质量保证单元平均得分为4.0分
b公司员工人数为88人
b公司质量保证单元平均分3.8分
这一定是我错过的简单的东西?先谢谢你。

mf98qq94

mf98qq941#

你需要两人一组 company_name 以及 wing_name 在子查询中,然后按 company_name 合并选定的行。

SELECT t1.company_name, SUM(t1.employees) AS employees, AVG(t1.qa_score) AS qa_score
FROM table AS t1
JOIN (SELECT company_name, wing_name, MAX(date_time) AS maxtime
      FROM table
      GROUP BY company_name, wing_name) AS t2
ON t1.company_name = t2.company_name AND t1.wing_name = t2.wing_name AND t1.date_time = t2.maxtime
GROUP BY t1.company_name

演示

相关问题