Sql 从两个表的结果集中返回最近的结果
我有一个查询,它从两个表中搜索最近的事务。查询工作正常,返回2个结果 但是根据要求,我还是要把它剪下来,换一个最近的。因此,查询应该只返回1个结果 我已经阅读了聚合函数,并尝试使用MAX和GROUP BY函数,如下所示:Sql 从两个表的结果集中返回最近的结果,sql,union,aggregate-functions,Sql,Union,Aggregate Functions,我有一个查询,它从两个表中搜索最近的事务。查询工作正常,返回2个结果 但是根据要求,我还是要把它剪下来,换一个最近的。因此,查询应该只返回1个结果 我已经阅读了聚合函数,并尝试使用MAX和GROUP BY函数,如下所示: SELECT MAX(reserve_date) FROM (SELECT ROW_NUMBER() over (partition BY lower(tb1.email) order by tb1.reserve_date DESC) AS ranking, tb
SELECT MAX(reserve_date)
FROM
(SELECT ROW_NUMBER() over (partition BY lower(tb1.email) order by tb1.reserve_date DESC) AS ranking,
tb1.id,
tb1.reserve_date
FROM TableTester1 tb1
UNION
SELECT ROW_NUMBER() over (partition BY lower(tb2.email) order by tb2.reserve_date DESC) AS ranking,
tb2.id,
tb2.reserve_date
FROM TableTester2 tb2
)
WHERE ranking = 1;
但这只会导致ORA-00979:而不是GROUP BY表达式错误
关于如何解决此问题,您有什么建议吗?为什么不仅限于前两项:
SELECT id, reserve_date
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY LOWER(tb1.email)
ORDER BY reserve_date DESC) AS rn,
id,
reserve_date
FROM TableTester1
) t
WHERE rn <= 2;
如果您实际上是指与前两个按秩对应的所有记录,则可以使用秩或密秩替换行编号,具体取决于您要使用哪一个。使用以下方法:
SELECT * FROM
(SELECT ROW_NUMBER() over (partition BY lower(tb.email) order by tb.reserve_date DESC) AS ranking,
tb1.id,
tb1.reserve_date from
(select * FROM TableTester1 tb1
UNION
select * FROM TableTester2 tb2
)tb)B
WHERE ranking = 1;
请在union all之后输入行号:
使用行号合并两个查询是不寻常的,您应该解释为什么要这样做。
SELECT * FROM
(SELECT ROW_NUMBER() over (partition BY lower(tb.email) order by tb.reserve_date DESC) AS ranking,
tb1.id,
tb1.reserve_date from
(select * FROM TableTester1 tb1
UNION
select * FROM TableTester2 tb2
)tb)B
WHERE ranking = 1;
SELECT tt.*
FROM (SELECT tt.*, ROW_NUMBER() OVER (ORDER BY reserve_date DESC) as seqnm
FROM ((SELECT tb1.id, tb1.reserve_date
FROM TableTester1 tb1
) UNION ALL
(SELECT tb2.id, tb2.reserve_date
FROM TableTester2 tb2
)
) tt
) tt
WHERE seqnum = 1;