基于一列消除重复行

时间:2018-04-20 12:44:39

标签: sql sql-server

我有两张桌子。每次更新行时,都会插入一个新行以及变体ID。该表看起来像:

第一张表:

ID1         variation_id1
111            1
111            1

第二张表:

ID2    ID-LineNO   variation_id2
111      10            1
111      20            1
111      10            2
111      20            2

结果应为:

ID1    ID2   ID-LineNO   variation_id2    
111    111     10            2               
111    111     20            2                

我想根据最新的变体ID以及相应的行号来选择ID。

Select DISTINCT ID2,ID1,ID-LineNO,variationid1
from second table
inner join first table on ID1 = ID2
where variation_id2 in (select max(variation_id2)
                        from second table 
                        where variation_id2 = variation_id2 
                        group by ID2)

我尝试使用上面的代码来获取结果,但仍然会获得重复的行。您可以帮我解决如何根据变体ID消除重复行的问题。

3 个答案:

答案 0 :(得分:2)

在子查询中,您需要对表进行别名,以便子查询与外部查询相关,而不是与自身相关:

Select DISTINCT ID2,ID1,ID-LineNO,variationid1
from second_table t2
inner join first_table t1 on t1.ID1 = t2.ID2
where variation_id2 in (select max(variation_id2)
                        from second_table t3
                        where t3.variation_id2 = t2.variation_id2 
                        group by ID2)

答案 1 :(得分:1)

我不确定这个问题,在第一个表中没有主键,在第二个表中你没有指定哪个是,但我认为你在select子句中写了错误的“variationid” 。我想有一个最清楚的例子,因为没有必要编写WHERE子句

SELECT DISTINCT ID2,ID1,ID-LineNO,variationid2
FROM second_table INNER JOIN first_table on ID2 = ID1
WHERE variationid2 in (
    SELECT max(variation_id2)
    FROM second_table 
    GROUP BY ID2
)

答案 2 :(得分:1)

如果您再次加入Max(variation_Id2),您将能够获得所需的结果。

  Select DISTINCT [second table].ID2,ID1,[ID-LineNO],variation_id2
    from [second table]
    inner join [first table] on ID1 = [second table].ID2
    INNER JOIN (SELECT Id2, MAX(variation_Id2) AS MaxiD FROM [second table] GROUP BY Id2) S ON S.Id2 = [second table].Id2
    WHERE variation_id2 = S.MaxiD