Sql 带join的条件语句
我有两个数据集,df1和df2,我希望将这两个数据集连接起来,然后应用一个条件,即如果主机列中有多个重复的行,则只取这一行以避免重复。我将在df1.version=df2.name和df1.date=df2.date加入df1和df2 条件:目的应='hi'或目的应='cat' df1 df2 以下是连接结果:Sql 带join的条件语句,sql,sql-server,Sql,Sql Server,我有两个数据集,df1和df2,我希望将这两个数据集连接起来,然后应用一个条件,即如果主机列中有多个重复的行,则只取这一行以避免重复。我将在df1.version=df2.name和df1.date=df2.date加入df1和df2 条件:目的应='hi'或目的应='cat' df1 df2 以下是连接结果: version host date name purpose date pat
version host date name purpose date
pat a16 12/1/2019 pat hi 12/1/2019
fam a16 12/1/2019 fam cat 12/1/2019
渴望的
做
我想我必须在SQL中实现IF-THEN语句。上面的语句只执行连接,但它不会删除连续的重复主机行。欢迎提出任何建议您可以应用行数函数并对行进行排序以删除重复行。但是,由于您按日期排序,目的行可以是hi或cat。如果您想特别选择其中一个作为第一个,您必须相应地申请订单 ;以cte_df为例 选择df1.version、df1.host、df1.date、df2.name、df2.purpose、df2.date作为df2date ,按df1超额分配的行号。按df1超额分配的主机订单。日期为rnk 来自df1 内连接df2 在df1.version=df2.name和df1.date=df2.date上 其中df2.1在“hi”和“cat”中 从cte_df中选择*其中rnk=1 不使用_CTE,使用派生表 选择* 从…起 选择df1.version、df1.host、df1.date、df2.name、df2.purpose、df2.date作为df2date ,按df1超额分配的行号。按df1超额分配的主机订单。日期为rnk 来自df1 内连接df2 在df1.version=df2.name和df1.date=df2.date上 其中df2.1在“hi”和“cat”中 AS T 其中rnk=1
您可以应用ROW_NUMBER函数并对行进行排序以删除重复的行。但是,由于您按日期排序,目的行可以是hi或cat。如果您想特别选择其中一个作为第一个,您必须相应地申请订单 ;以cte_df为例 选择df1.version、df1.host、df1.date、df2.name、df2.purpose、df2.date作为df2date ,按df1超额分配的行号。按df1超额分配的主机订单。日期为rnk 来自df1 内连接df2 在df1.version=df2.name和df1.date=df2.date上 其中df2.1在“hi”和“cat”中 从cte_df中选择*其中rnk=1 不使用_CTE,使用派生表 选择* 从…起 选择df1.version、df1.host、df1.date、df2.name、df2.purpose、df2.date作为df2date ,按df1超额分配的行号。按df1超额分配的主机订单。日期为rnk 来自df1 内连接df2 在df1.version=df2.name和df1.date=df2.date上 其中df2.1在“hi”和“cat”中 AS T 其中rnk=1
只坐第一排。。。什么定义了这里的第一行?add和row_id=1。重复行是什么意思?我希望从示例输出的“host”列中删除任何重复行,是的,有两行的主机值为a16,但选择version=pat的行还是version=fam的行,由什么业务逻辑决定?这对于提出一个有效的解决方案是非常关键的。。。什么定义了这里的第一行?add和row_id=1。重复行是什么意思?我希望从示例输出的“host”列中删除任何重复行,是的,有两行的主机值为a16,但选择version=pat的行还是version=fam的行,由什么业务逻辑决定?这对于建议一个有效的解决方案非常重要。谢谢,当“主机”列中存在重复项时,有没有办法删除行?是的。这就是在这个问题中需要注意的。我们按主机进行分区并生成行号。因此,对于第一个主机行,秩将为1。只有它在列表中被选中end@Lynn,您不需要CTE。可以使用派生表。我已将该解决方案添加到回答共享您的小提琴链接中,以便我们可以在这方面帮助您it@Lynn,您提到它是sql server。fiddle不利于MySQL谢谢,当“主机”列中存在重复项时,有没有办法删除行?是的。这就是在这个问题中需要注意的。我们按主机进行分区并生成行号。因此,对于第一个主机行,秩将为1。只有它在列表中被选中end@Lynn,您不需要CTE。可以使用派生表。我已将该解决方案添加到回答共享您的小提琴链接中,以便我们可以在这方面帮助您it@Lynn,您提到它是sql server。小提琴是反对mySQL的
name purpose date
pat hi 12/1/2019
fam cat 12/1/2019
hello dog 12/1/2019
dan bird 12/1/2019
version host date name purpose date
pat a16 12/1/2019 pat hi 12/1/2019
fam a16 12/1/2019 fam cat 12/1/2019
version host date name purpose date
pat a16 12/1/2019 pat hi 12/1/2019
select df1.version, df1.host, df1.date, df2.name, df2.purpose, df2.date
from df1
left join df2
on df1.version = df2.name AND
df1.date = df2.date
where df2.purpose = 'hi' OR df2.purpose = 'cat'