如何根据两个表的创建顺序有选择地显示两个表中的记录

时间:2013-01-22 14:49:27

标签: mysql sql sql-server database oracle

假设我们有两个带有id和timestamp列的表。 我们如何有选择地按时间戳的顺序显示两个表中前10个记录的ID。

例如,我们在table1中创建了一条记录,然后我们在table2中创建了一条记录,然后我们在table1中创建了一条记录,然后我们在table2中创建了一条记录........等等。

2 个答案:

答案 0 :(得分:3)

根据您的RDBMS,您可以使用ROWNUM,LIMIT,或使用Row_Number()OVER(ORDER BY datefield DESC)创建您自己的Row_Number。

这可能有效(对于Oracle)。

select *
from  
( select id, datefield from Table1 
   union select id, datefield From Table2 order by datefield desc )  t
where ROWNUM <= 10;

对于MySQL:

select *
from  
( select id, datefield from table 
   union select id, datefield from table2 ) t
order by datefield desc
limit 10;

对于SQL Server:

select * 
from
(
    select *, Row_Number() OVER (ORDER BY datefield DESC) as rown
    from  
    ( select id, datefield from table 
       union select id, datefield from table2 ) t
 ) t2
 where rown <= 10
祝你好运。

答案 1 :(得分:1)

我不确定这是否是你要找的。这将在MySql中起作用:

SELECT 'table1' tab, id, timestamp
FROM table1
UNION ALL
SELECT 'table2' tab, id, timestamp
FROM table2
ORDER BY timestamp DESC
LIMIT 10

并将选择在table1table2之一中插入的最后10条记录。这将在SQL Server中起作用:

SELECT TOP 10 * FROM (
  SELECT TOP 10 'table1' tab, id, timestamp
  FROM table1
  ORDER BY timestamp DESC
  UNION ALL
  SELECT TOP 10 'table2' tab, id, timestamp
  FROM table2
  ORDER BY timestamp DESC ) t
ORDER BY timestamp DESC