假设我们有两个带有 id 和 timestamp 列的表。我们如何按照时间戳的顺序有选择地显示两个表中前 10 条记录的 id。
例如,首先我们在 table1 中创建了一条记录,然后我们在 table2 中创建了一条记录,然后我们在 table1 中创建了一条记录,然后我们在 table2 中创建了一条记录............等等。
假设我们有两个带有 id 和 timestamp 列的表。我们如何按照时间戳的顺序有选择地显示两个表中前 10 条记录的 id。
例如,首先我们在 table1 中创建了一条记录,然后我们在 table2 中创建了一条记录,然后我们在 table1 中创建了一条记录,然后我们在 table2 中创建了一条记录............等等。
根据您的 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
祝你好运。
我不确定这是否是您要找的。这将在 MySql 中工作:
SELECT 'table1' tab, id, timestamp
FROM table1
UNION ALL
SELECT 'table2' tab, id, timestamp
FROM table2
ORDER BY timestamp DESC
LIMIT 10
并将选择插入其中之一的最后 10 条记录table1
或table2
。这将在 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