如何组合2个mysql查询

时间:2013-04-01 09:49:26

标签: mysql nested-queries

我有以下2个查询。

Query 1 : 
select distinct(thread_id) from records where client_name='MyClient'

Query 2 :
select max(thread_no) from records 
where thread_id='loop_result_from_above_query' AND action='Reviewed'

是否可以将它们组合成一个查询?

第二个查询在第一个查询的每个结果上运行。

谢谢。

参见附件中的一小段mysql记录。 enter image description here

我需要一个mysql查询来输出只有action =“MyAction”的记录作为给定的thread_ids集的最新记录。在样本数据集中:使用Sr记录:7201

我希望这有助于我:)

4 个答案:

答案 0 :(得分:0)

您可以使用SELF JOIN,但这不建议会影响您的查询性能。请查看以下查询以供参考

SELECT DISTINCT r1.thread_id, MAX(r2.thread_no) from records r1 LEFT JOIN records r2 ON r2.thread_id=r1.thread_id WHERE r1.client_name='MyClient' AND r2.action='Reviewed'

答案 1 :(得分:0)

SELECT a.maxthreadid, 
       b.maxthreadno 
FROM   (SELECT DISTINCT( thread_id ) AS MaxThreadId 
        FROM   records 
        WHERE  client_name = 'MyClient') a 
       CROSS JOIN (SELECT Max(thread_no) AS MaxThreadNo 
                   FROM   records 
                   WHERE  thread_id = 'loop_result_from_above_query' 
                          AND action = 'Reviewed') b 

答案 2 :(得分:0)

SELECT  client_name, thread_id, MAX(thread_no) max_thread
FROM    records
WHERE   action='Reviewed' AND client_name='MyClient'
GROUP   BY client_name, thread_id

更新1

SELECT  a.*
FROM    records a
        INNER JOIN
        (
            SELECT  thread_id, max(sr) max_sr
            FROM    records
            GROUP   BY thread_id
        ) b ON a.thread_id = b.thread_id AND
                a.sr = b.max_sr
WHERE   a.action = 'MyAction'

答案 3 :(得分:0)

试试这个。

SELECT * 
FROM   (SELECT Row_number() 
                 OVER ( 
                   partition BY thread_id 
                   ORDER BY thread_no)      no, 
               Max(thread_no) 
                 OVER( 
                   partition BY thread_id ) Maxthread_no, 
               thread_id, 
               action, 
               client_name 
        FROM   records
        Where client_name = 'MyClient') AS T1 
WHERE  no = 1 
       AND action = 'Reviewed'