从SQL查询中删除“重复”记录

从SQL查询中删除“重复”记录,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试编写一个查询,如果在值发生更改之前删除重复的值。例如,我有以下数据: id, date_recived, name1, percent 1, 8/19/13, Joe, 2 2, 8/15/13, Joe, 3 3, 8/12/13, Joe, 2 4, 4/08/13, Joe, 2 在本例中,我只需要删除id为3的行,因为百分比没有变化。我尝试过使用Row_Number,但是当我按名称和百分比进行分区时,数据显示如下: id, date_recived, name1, perce

我正在尝试编写一个查询,如果在值发生更改之前删除重复的值。例如,我有以下数据:

id, date_recived, name1, percent
1, 8/19/13, Joe, 2
2, 8/15/13, Joe, 3
3, 8/12/13, Joe, 2
4, 4/08/13, Joe, 2
在本例中,我只需要删除id为3的行,因为百分比没有变化。我尝试过使用Row_Number,但是当我按名称和百分比进行分区时,数据显示如下:

id, date_recived, name1, percent, Row_Number
1, 8/19/13, Joe, 2, 3
2, 8/15/13, Joe, 3, 1
3, 8/12/13, Joe, 2, 2
4, 4/08/13, Joe, 2, 1
这不起作用,因为1会被扔掉,我需要保留它。任何帮助都将不胜感激

谢谢

编辑:

查询来自注释:

WITH feedback_On_Same_Date AS (
      SELECT id, received_dt, participant_nm, pretax_deferral_prcnt,
             ROW_NUMBER() OVER(PARTITION BY participant_nm, received_dt ORDER BY received_dt DESC, id DESC) AS RowNumberByDt
      FROM be_ing_feedback
     )
SELECT *, ROW_NUMBER() OVER(PARTITION BY participant_nm, pretax_deferral_prcnt ORDER BY received_dt ASC, id ASC) AS RowNumberByDef
FROM feedback_On_Same_Date
WHERE RowNumberByDt = 1
ORDER BY participant_nm ASC, received_dt DESC

听起来您想删除上一行相同的行

为此,我将使用Row_Number函数和自联接:

; WITH cte AS (
  SELECT id
       , date_recived
       , name1
       , percent
       , Row_Number() OVER (PARTITION BY name ORDER BY date_recived) As seq
  FROM   your_table
)
SELECT *
FROM   cte As curr
 LEFT
  JOIN cte As prev
    ON prev.name1   = curr.name1
   AND prev.seq + 1 = curr.seq
看看这个查询返回的数据,然后它应该只是一个简单的例子,添加一个WHERE子句来获取要删除的记录


我将把剩下的谜题留给你-

如果您使用的是SQL Server 2012,只需使用lag函数:

select id, date_recived, name1, percent
from (select t.*,
             lag(percent) over (partition by name1 order by date_received) as prev_percent
      from t
     ) t
where percent <> prev_percent or prev_percent is null;

请发布您尝试过的sql。您使用的是哪种DBMS?神谕Postgres?SQL Server,是的。我当前的查询即将进行…在同一天收到反馈,如选择id、已接收描述、参与者描述、税前延迟、参与者多分配行数、已接收描述多分配行数、参与者多分配行数、,收到ASC的税前延期订单,id ASC为RowNumberByDef,来自同一日期的反馈,其中RowNumberByDt=1,参与者收到订单,收到描述,这将是非常棒的,并且似乎有效。太糟糕了,我只使用2008。谢谢你,这对我很有用。非常感谢。