【问题标题】:Exclude min values from Group从组中排除最小值
【发布时间】:2019-03-09 21:27:37
【问题描述】:

我有表 MyTable (Id, LocationId, UserName, Date, Rank)

我需要从该表中删除重复项,但左行的最小 ID

select min(cr.id)
from MyTable mt
group by mt.LocationId, mt.UserName, mt.Date, mt.Rank
having count(mt.id) > 1

这是从组中选择最小值的查询...但不知道如何将它们从具有重复项的查询中排除

select mt.LocationId, mt.UserName, mt.Date, mt.Rank
from MyTable mt
group by mt.LocationId, mt.UserName, mt.Date, mt.Rank
having count(mt.id) > 1

【问题讨论】:

    标签: sql sql-server group-by aggregate


    【解决方案1】:

    您可以使用CTEROW_NUMBER() ROW_NUMBER() OVER () 函数正在查找与重复列具有相同值的行。这种列组合的第一次出现被分配为 1 的rn,下一个为 2、3 等等。 按Id 升序排序,您将得到最小的 rn = 1,因此删除 where rn > 1,删除重复项并保留 id 最小的行。

    with cte as (
        select
            *
            ,rn = ROW_NUMBER() over (PARTITION BY LocationId, UserName, Date, Rank order by id asc)
        from MyTable 
    )
    delete from cte where rn > 1
    

    【讨论】:

      【解决方案2】:

      使用 row_number()

       delete m from 
       (select mt.id, mt.LocationId, mt.UserName, mt.Date, mt.Rank,
       row_number() over(partion by mt.LocationId, mt.UserName, mt.Date, mt.Rank 
       order by mt.id) as rn
       from MyTable mt) m where rn<>1
      

      【讨论】:

        【解决方案3】:

        你可以使用row_number窗口函数

        with t1 as
        (
        select * , 
        row_number() over(partition by mt.LocationId, mt.UserName, mt.Date, mt.Rank order by Id) as rn from MyTable mt
        ) delete from t1 where t1.rn!=1
        

        【讨论】:

          【解决方案4】:

          我会使用row_number() 函数:

          delete mt
          from (select mt.*,
                       row_number() over (partition by mt.LocationId, mt.UserName, mt.Date, mt.Rank order by mt.id) as seq
                from MyTable mt
               ) mt
          where seq > 1;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-02
            • 2016-07-29
            • 2022-10-23
            • 2017-03-07
            • 1970-01-01
            • 1970-01-01
            • 2018-06-25
            • 2014-08-06
            相关资源
            最近更新 更多