1

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

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

4

2 回答 2

3

根据您的 RDBMS,您可以使用 ROWNUM、LIMIT 或使用 Row_Number() OVER(按日期字段 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

祝你好运。

于 2013-01-22T14:51:36.200 回答
1

我不确定这是否是您要找的。这将在 MySql 中工作:

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

并将选择插入其中之一的最后 10 条记录table1table2。这将在 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
于 2013-01-22T15:59:59.807 回答