从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。谢谢你,这对我很有用。非常感谢。