A melhor maneira é criar uma nova tabela contendo os campos comuns das três outras tabelas e adicionar um índice no campo de data comum. As três tabelas originais devem conter uma chave estrangeira vinculada à tabela comum. Com este design a consulta se torna simples:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Se você também precisar de dados de tabelas mais específicas, poderá usar LEFT JOINs para também selecionar esses dados na mesma consulta.
Se você não puder alterar seu design e o desempenho não for um problema, poderá usar UNION ALL para combinar os resultados de todas as três tabelas antes de classificar:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Observe que o acima só funcionará se todas as tabelas tiverem a mesma estrutura. Se você tiver campos que ocorrem em uma tabela, mas não em outras, você deve omiti-los do SELECT ou então retornar NULL para essa coluna nas outras tabelas. Por exemplo se:
table1
tem colunasa
,b
,c
edate
.table2
tem colunasb
,c
edate
.table3
tem colunasa
,c
edate
.
Então use isso:
SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100