我正在联合两个查询,但我得到的是每个查询中出现的ID。我不知道如何只在第一次出现id时才保留。关于该行的其他所有内容都不同。一般来说,很难知道我将要保留两个查询中的哪一个,因此,我需要一个通用的解决方案。
我正考虑创建一个临时表并选择最小日期(一旦将日期转换为int)。
关于正确语法的任何想法?
答案 0 :(得分:1)
如果您使用关键字UNION,那么它将从您正在使用的两个数据集中删除重复项。 UNION ALL保留重复项。
您可以在此处查看具体信息: http://www.w3schools.com/sql/sql_union.asp
答案 1 :(得分:1)
您可以使用row_number()
功能执行此操作。这将从1开始为具有相同id的每一行(基于partition by
子句)分配一个序号。序列的顺序由order by
子句确定。因此,以下内容将1
分配给每个id
的最早日期:
select t.*
from (select t.*,
row_number() over (partition by id order by date asc) as seqnum
from ((select *
from <subquery1>
) union all
(select *
from <subquery2>
)
) t
) t
where seqnum = 1;
最终where
子句只是过滤第一次出现。
答案 2 :(得分:0)
如果您只想拥有2条记录中的一条且它们不相同,则必须自行过滤。您可能需要执行以下操作。这可能与一个(选择联合选择)块有关,但这应该让你开始。
select *
from (
select id
, date
, otherstuf
from table_1
union all
select id
, date
, otherstuf
from table_2
) x1
, (
select id
, date
, otherstuf
from table_1
union all
select id
, date
, otherstuf
from table_2
) x2
where x1.id = x2.id
and x1.date < x2.date
虽然如果你沿着这样的道路重新考虑这个,为什么还要去UNION呢?