(MySQL 5.7) 如何合并我的两个查询?

(MySQL 5.7) How to combine my two queries?

如何在 MySQL 5.7 中合并我的两个查询:

(windows 函数不起作用)

1:此查询正在查找超过 10 条消息且间隔至少一小时的所有对话。

SELECT `dialog_id`
  FROM `messages`
  GROUP BY `dialog_id`
  HAVING COUNT(*) >= 10 
    AND MIN(`timestamp`) + INTERVAL 1 HOUR < MAX(`timestamp`)

2:第二个查询 select 每个对话的最后两行。

SELECT * FROM messages tbl WHERE 
(SELECT COUNT(*) FROM messages tbl1 WHERE tbl1.dialog_id = tbl.dialog_id AND tbl1.id >= tbl.id AND 
(user_from = :user_from OR user_to = :user_to)) <= 2 ORDER BY dialog_id DESC

所以,我想要的是 select 每个持续超过一个小时的对话的最后两行 发送超过 10 条消息的地方。

虽然我没有正确找到你,这是你要找的吗:

    SELECT * FROM messages tbl WHERE 
(SELECT COUNT(*) FROM messages tbl1 WHERE tbl1.dialog_id = tbl.dialog_id AND tbl1.id >= tbl.id AND 
(user_from = :user_from OR user_to = :user_to)) <= 2
and dialog_id in (SELECT `dialog_id`
  FROM `messages`
  GROUP BY `dialog_id`
  HAVING COUNT(*) >= 10 
    AND MIN(`timestamp`) + INTERVAL 1 HOUR < MAX(`timestamp`))

 ORDER BY dialog_id DESC

您可以使用子查询完成此操作的一种方法:

SELECT *
FROM messages tbl
WHERE (
    SELECT COUNT(*)
     messages tbl1
     tbl1.dialog_id = tbl.dialog_id
     tbl1.id >= tbl.id
     (user_from = :user_from OR user_to = :user_to)) <= 2
  and dialog_id in (
    SELECT `dialog_id`
    FROM `messages`
    GROUP BY `dialog_id`
    HAVING COUNT(*) >= 10
       AND MIN(`timestamp`) + INTERVAL 1 HOUR < MAX(`timestamp`))
ORDER BY dialog_id DESC

您可能需要稍微调整一下,因为我没有您表格的完整结构,但原则如下:获取所有 dialogue_ids 匹配您的 10 小时以上标准,然后使用它来限制从“获取最近的两条”逻辑返回的消息。