MySQL:Max Date(),汇总单独列的最后日期值

标签 mysql

我试图通过 Company_Name 使用此数据集总结每个 Wing_Name 的每个员工(总和)和 QA_Score(平均​​值)的 Date_Time 的最后值:

+--------------+-----------+------------------+-----------+----------+
| 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";

所需的输出现在应该是 Company_Name 的员工通过每个 Wing_name 的结果的总和,以及相应 Wing_Name 的 QA_Score 平均值,但汇总在 Company_Name 下

所需的输出遵循以下逻辑:

  • 公司 A 和 Wing A 员工的上次 Date_Time 值为 84。
  • 公司 A 和翼楼 B 的员工的上次日期时间值为 52。
  • 截至上一个 Date_Time,公司 A 有 84+52 名员工 (136) 检索。
  • 公司 A 和 Wing A 的 QA_Score 的最后 Date_Time 值为 3.7。
  • 公司 A 和 Wing B 的 QA_Score 的最后一个 Date_time 值为 4.3。
  • 公司 A 的平均 QA_Score 为 4.0
  • B公司员 worker 数为88人
  • B公司平均QA_Score 3.8

这一定是我缺少的简单东西? 提前谢谢你。

最佳答案

您需要在子查询中同时按 company_namewing_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

DEMO

关于MySQL:Max Date(),汇总单独列的最后日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312521/

相关文章:

mysql - SQL 查询,将 NULL 视为零

MySQL 到 MongoDB 将整数 ID 转换为 ObjectID 并重建引用

mysql - SQL 计数结果并加入

mysql - 这个查询输出什么?

php - Linux PHP fatal error : Call to undefined function mysqli_connect()

mysql - 如何从内部调用存储过程获取记录集?

mysql - 用于在 Windows 中打开 mysql 控制台的简单 .bat 文件?

php - PHP MYSQL 组合的转换问题

mysql - 查询以从以下屏幕截图获取每个不同位置的数量总和

mysql - 如何获取多行json对象