从3个表中检索结果并按日期排序

ni65a41a  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(329)

假设我有三张table:

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bob        ║ 2018-07-30 14:20:03 ║
║ 2 ║ Dylan      ║ 2018-07-29 14:20:03 ║
║ 3 ║ Frank      ║ 2018-07-17 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bernard    ║ 2018-07-31 14:20:03 ║
║ 2 ║ Max        ║ 2018-07-28 14:20:03 ║
║ 3 ║ Dan        ║ 2018-07-16 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Maria      ║ 2018-07-12 14:18:03 ║
║ 2 ║ Sofia      ║ 2018-07-30 14:23:03 ║
║ 3 ║ Lila       ║ 2018-07-25 14:22:03 ║
╚═══╩════════════╩═════════════════════╝

我想知道如何选择前3个元素,按日期排序(最接近的日期从现在开始第一个),以便最终,我的查询结果如下所示:

╔═══╦════════════╦═════════════════════╗
║   ║ Name       ║ Date                ║
╠═══╬════════════╬═════════════════════╣
║ 1 ║ Bernard    ║ 2018-07-31 14:20:03 ║
║ 2 ║ Sofia      ║ 2018-07-30 14:23:03 ║
║ 3 ║ Bob        ║ 2018-07-30 14:20:03 ║
╚═══╩════════════╩═════════════════════╝

干杯!

pxyaymoc

pxyaymoc1#

你需要 union allrow_number() :

select t.*
from ( select *, row_number() over (partition by tablename order by date desc) seq
       from ( (select name, date, 'table1' as tablename
               from table1 t1
              ) union all
              (select name, date, 'table2'
               from table2 t2
              ) union all
              (select name, date, 'table3'
               from table3 t3
              )
           ) t
     ) t
where seq = 1;
ds97pgxw

ds97pgxw2#

SELECT *
FROM
(
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2
    UNION ALL
    SELECT * FROM table3
) tmp
ORDER BY DATE DESC
LIMIT 3;

相关问题