簡體   English   中英

如何組合兩個查詢? MySQL

[英]How to combine two queries? MySQL

我怎樣才能結合我的兩個查詢?
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

第二個查詢為每個對話框選擇最后兩行。

所以,我想要的是 select 最后兩行,每個對話持續一個多小時,其中有超過 10 條消息。 我想在對話框預覽頁面上顯示它們。

對不起,我的英語不是我的母語。

您可以使用 window 函數進行所有這些計算:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM