mysql - 如何更新发送日期早于聊天开始的聊天消息?
问题描述
我有两个表:1.聊天(包含聊天的开始日期),2.消息(包含聊天消息的发送日期)。
聊天:
id, start_date
1, 2015-06-01
2, 2014-06-01
3, 2013-06-01
留言:
id, message, sent_on, chat_id
1, messag1, 2015-05-01, 1
2, messag2, 2015-04-01, 1
3, messag3, 2015-03-01, 1
4, messag4, 2015-02-01, 1
5, messag5, 2014-06-01, 2
6, messag6, 2014-06-01, 2
7, messag7, 2014-06-01, 2
8, messag8, 2014-06-01, 2
9, messag9, 2013-04-01, 3
10, messag10, 2013-03-01, 3
11, messag11, 2013-02-01, 3
12, messag12, 2013-01-01, 3
问题是来自 chat_id = 1 和 3 的消息的记录的sent_on
日期早于 chats.id 等于 1 和 chats.id 等于 3。
我们如何更新chats.id 1 的chats
表设置start_date 等于来自chat_id 1(在本例中为2015-02-01)的消息的最早日期和chats.id 3 与来自chat_id 3 的消息的最早日期(等于这个案例2013-01-01)?
解决方案
我们可以尝试对子查询进行更新连接,以查找messages
表中每个聊天的最早日期:
UPDATE chats c
INNER JOIN
(
SELECT chat_id, MIN(sent_on) AS min_sent_on
FROM messages
GROUP BY chat_id
) m
ON c.id = m.chat_id
SET
c.start_date = m.min_sent_on;
推荐阅读
- java - 使用 Eclipselink 从 OracleDB 获取数据的时间很长
- elasticsearch - 弹性搜索按类型和索引获取文档与仅索引
- xml - xmlns 属性上的 Camel XPATH 选择包含
- python - pandas 中的 pd.concat 给出了 TypeError: cannot concatenate object of type '
'; 只有 Series 和 DataFrame obj 是有效的 - botframework - 在 MS Teams 中将 URL 作为弹出窗口/Iframe 打开
- python - 从 Python 中调用 Google Cloud 函数
- ios - UIViewPropertyAnimator 不尊重持续时间和延迟参数
- python - 理解 ValueError:python 中的“无效数字”
- algorithm - 具有价值函数的一般最佳对算法
- windows - Windows PowerShell 的“rm -rf”等效项?