id 列と timestamp 列を持つ 2 つのテーブルがあるとします。両方のテーブルの最初の 10 レコードの ID をタイムスタンプ順に選択的に表示するにはどうすればよいでしょうか。
たとえば、最初に table1 にレコードを作成し、次に table2 にレコードを作成し、次に table1 にレコードを作成し、次に table2 にレコードを作成したとします。
id 列と timestamp 列を持つ 2 つのテーブルがあるとします。両方のテーブルの最初の 10 レコードの ID をタイムスタンプ順に選択的に表示するにはどうすればよいでしょうか。
たとえば、最初に table1 にレコードを作成し、次に table2 にレコードを作成し、次に table1 にレコードを作成し、次に table2 にレコードを作成したとします。
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
幸運を。
これがあなたが探しているものかどうかはわかりません。これはMySqlで機能します:
SELECT 'table1' tab, id, timestamp
FROM table1
UNION ALL
SELECT 'table2' tab, id, timestamp
FROM table2
ORDER BY timestamp DESC
LIMIT 10
table1
または のいずれかに挿入された最後の 10 レコードが選択されます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