Удаление строки на основе максимального значения в SQL Server 2008 R2 - PullRequest
1 голос
/ 16 мая 2019

enter image description here

У меня есть @RankTable таблица, которая содержит дебет разных клиентов. Из этого я хочу удалить для каждого клиента, который имеет самый высокий ранг.

Declare @RankTable Table
(
   Customer_ID int,
   Debit decimal(18,2),
   Transaction_Date datetime,
   Sales_Master_ID int,
   Rank int,
   Rank1 int
)
Insert into @RankTable
  Select *,row_number()over(partition by (Customer_ID)  Order By 
    Customer_ID)as Rank1 
From @tempTable


Select  Customer_ID,Debit,Transaction_Date ,Sales_Master_ID,Rank1 from 
@RankTable Order By Customer_ID

Я ожидаю, что выход таблицы выше: Я хочу удалить клиента, который имеет максимальный рейтинг. Например: я хочу удалить строку Customer_ID = 4, которая имеет Rank1 = 20 (как это для всех клиентов), но я не могу удалить

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Используйте CTE, который нацелен на запись с самым высоким рейтингом для каждого клиента.

WITH cte AS (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY Customer_ID ORDER BY Rank1 DESC) rn
    FROM @RankTable
)

DELETE
FROM cte
WHERE rn = 1;
0 голосов
/ 16 мая 2019

Это будет работать-

DELETE A
FROM @RankTable A
INNER JOIN
(
    SELECT ID,MAX(Rank1) Rank1
    FROM @RankTable 
    GROUP BY ID
) B
ON A.id = B.id and A.Rank1 = B.Rank1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...