【问题标题】:Group 3 tables by max date按最大日期分组 3 个表
【发布时间】:2017-08-17 09:45:57
【问题描述】:

一个客户可以进行多次查询,一个查询可以有很多更新。我正在尝试查看每个查询和最新更新。我可以提取最新日期,但不能提取与其相关的更新。我见过与我类似的答案,但它们似乎只处理一个连接,我不明白如何使用这些来找到解决方案。

这是我的 sql

select c.name, i.inquirycontent, u.updatecontent, max(u.date) from inquiries i
inner join customers c on c.customerid = i.customerid
left join updates u on u.inquiryid = i.inquiryid
group by i.inquiryid

即使我省略了客户表,我仍然无法匹配其内容的最新更新。我该怎么做?

编辑 - 根据要求,这里是一些示例数据

+------------+------+
| customerid | name |
+------------+------+
| 1          | jeff |
+------------+------+
| 2          | anne |
+------------+------+

+-----------+-----------------+------------+
| inquiryid | inquirycontent  | customerid |
+-----------+-----------------+------------+
| 1         | inquiry1content | 1          |
+-----------+-----------------+------------+
| 2         | inquiry2content | 1          |
+-----------+-----------------+------------+
| 3         | inquiry3content | 2          |
+-----------+-----------------+------------+

+----------+-----------------+-----------+----------+
| updateid | updatecontent   | inquiryid | date     |
+----------+-----------------+-----------+----------+
| 1        | update1content  | 1         | 01-01-17 |
+----------+-----------------+-----------+----------+
| 2        | update2content  | 1         | 03-01-17 |
+----------+-----------------+-----------+----------+
| 3        | update3content  | 3         | 04-01-17 |
+----------+-----------------+-----------+----------+

这就是我希望查询输出的内容 -

+------+-----------------+----------------+----------+
| name | inquirycontent  | latestupdate   | date     |
+------+-----------------+----------------+----------+
| jeff | inquiry1content | update2content | 03-01-17 |
+------+-----------------+----------------+----------+
| jeff | inquiry2content | NULL           | NULL     |
+------+-----------------+----------------+----------+
| anne | inquiry3content | update3content | 04-01-17 |
+------+-----------------+----------------+----------+

【问题讨论】:

  • 请张贴几行表格
  • 如何格式化?
  • 缩进 4 个空格并尽量让它看起来不错,就像代码块一样

标签: mysql join max


【解决方案1】:

这是使用 UNION 的粗略解决方案,但它可以满足我的需要。第一个选择通过最新更新查找所有唯一查询,第二个选择查找所有尚未更新的行。

(select c.name, i.inquirycontent, u.updatecontent, t2.mxdate
from updates u
inner join inquiries i on i.inquiryid = u.inquiryid
inner join customers c on c.customerid = i.customerid
inner join
(
  select max(u.date) mxdate, i.inquiryid
  from updates u
  left join inquiries i on i.inquiryid = u.inquiryid
  group by i.inquiryid
) t2
  on u.inquiryid = t2.inquiryid
  and u.date = t2.mxdate)
UNION
(select c.name, i.inquirycontent, u.updatecontent, u.date 
from inquiries i
left join updates u on u.inquiryid = i.inquiryid
inner join customers c on c.customerid = i.customerid
where u.updatecontent is NULL)

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2012-07-15
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多