SQL Server:通过选择第一个发生日期,联合所有ID,但删除重复ID

SQL Server:通过选择第一个发生日期,联合所有ID,但删除重复ID,sql,sql-server,union,Sql,Sql Server,Union,我联合了两个查询,但我得到了一个ID,该ID出现在每个查询中。我不知道如何只在id第一次出现时保存。这一排的其他一切都不同。一般来说,很难知道这两个查询中的哪一个需要保持重复,因此,我需要一个通用的解决方案 我在考虑创建一个临时表,并在日期转换为int后选择min日期 关于正确的语法有什么想法吗?如果您使用关键字UNION,那么它将从您正在使用的两个数据集中删除重复项。联合所有保留重复项 您可以在此处查看详细信息: 如果使用关键字UNION,则它将从正在使用的两个数据集中删除重复项。联合所有保留

我联合了两个查询,但我得到了一个ID,该ID出现在每个查询中。我不知道如何只在id第一次出现时保存。这一排的其他一切都不同。一般来说,很难知道这两个查询中的哪一个需要保持重复,因此,我需要一个通用的解决方案

我在考虑创建一个临时表,并在日期转换为int后选择min日期


关于正确的语法有什么想法吗?

如果您使用关键字UNION,那么它将从您正在使用的两个数据集中删除重复项。联合所有保留重复项

您可以在此处查看详细信息:

如果使用关键字UNION,则它将从正在使用的两个数据集中删除重复项。联合所有保留重复项

您可以在此处查看详细信息:

如果使用关键字UNION,则它将从正在使用的两个数据集中删除重复项。联合所有保留重复项

您可以在此处查看详细信息:

如果使用关键字UNION,则它将从正在使用的两个数据集中删除重复项。联合所有保留重复项

您可以在此处查看详细信息:

如果您只想拥有这两条记录中的一条,并且它们不完全相同,您必须自己过滤它们。您可能需要执行以下操作。这可能是一个select union select块可以完成的,但这应该可以让您开始

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

尽管重新思考,如果你走这样的路,为什么还要费心把它联合起来呢

如果您只想拥有这两条记录中的一条,而它们又不完全相同,则必须自己过滤它们。您可能需要执行以下操作。这可能是一个select union select块可以完成的,但这应该可以让您开始

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

尽管重新思考,如果你走这样的路,为什么还要费心把它联合起来呢

如果您只想拥有这两条记录中的一条,而它们又不完全相同,则必须自己过滤它们。您可能需要执行以下操作。这可能是一个select union select块可以完成的,但这应该可以让您开始

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

尽管重新思考,如果你走这样的路,为什么还要费心把它联合起来呢

如果您只想拥有这两条记录中的一条,而它们又不完全相同,则必须自己过滤它们。您可能需要执行以下操作。这可能是一个select union select块可以完成的,但这应该可以让您开始

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
尽管重新思考,如果你走这样的路,为什么还要费心把它联合起来呢

您可以使用row_number函数执行此操作。这将根据partition by子句为具有相同id的每一行分配一个从1开始的序列号。序列的顺序由ORDERBY子句决定。因此,下面为每个id的最早日期指定1:

最后一个where子句只过滤第一次出现的内容。

您可以使用row\u number函数来完成此操作。这将根据partition by子句为具有相同id的每一行分配一个从1开始的序列号。序列的顺序由ORDERBY子句决定。因此,下面为每个id的最早日期指定1:

最后一个where子句只过滤第一次出现的内容。

您可以使用row\u number函数来完成此操作。这将根据partition by子句为具有相同id的每一行分配一个从1开始的序列号。序列的顺序由ORDERBY子句决定。因此,下面为每个id的最早日期指定1:

最后一个where子句只过滤第一次出现的内容。

您可以使用row\u number函数来完成此操作。这将根据partition by子句为具有相同id的每一行分配一个从1开始的序列号。序列的顺序由ORDERBY子句决定。因此,下面为每个id的最早日期指定1:


最后一个where子句只过滤第一次出现的内容。

这太神奇了。非常感谢你!这太神奇了。非常感谢你!这太神奇了。非常感谢你!这太神奇了。非常感谢你!你没有比编辑我的查询更好的事吗?你没有比编辑我的查询更好的事吗?你没有比编辑我的查询更好的事吗?你没有比编辑我的查询更好的事吗?谢谢,从来没有想过。谢谢,从来没有想过。谢谢,从来没有想过。谢谢,从来没有想过。谢谢,从来没有想过。