【问题标题】:How to combine two queries? MySQL如何组合两个查询? MySQL
【发布时间】:2021-01-08 15:14:33
【问题描述】:

如何组合我的两个查询?
1:

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

此查询正在查找超过 10 条消息且持续时间超过一个小时的对话框。

2:

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

第二个查询为每个对话框选择最后两行。

所以,我想要的是为每个持续一个多小时且超过 10 条消息的对话框选择最后两行。 我想在对话框预览页面上显示它们。

对不起,我的英语不是我的母语。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用窗口函数进行所有这些计算:

    SELECT m.*
    FROM (SELECT m.*,
                 ROW_NUMBER() OVER (PARTITION BY dialog_id ORDER BY id DESC) as seqnum,
                 COUNT(*) OVER (PARTITION BY dialog_id) as cnt,
                 MIN(timestamp) OVER (PARTITION BY dialog_id) as min_timestamp,
                 MAX(timestamp) OVER (PARTITION BY dialog_id) as max_timestamp
          FROM messages m
         ) m
    WHERE seqnum <= 2 AND
          cnt >= 10 AND
          max_timestamp > min_timestamp + INTERVAL 1 HOUR;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 2018-08-07
      • 2018-08-08
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多