使用 SQL 删除 Dept 中有多个用户的地方
delete where you have multiple users within Dept using SQL
我试图在每个位置有多个用户的情况下保留一个用户。我还想保留最后更新的用户。
这是我的数据
ID Location REGION LastUpdate
1 CLT NA 1/15/2014
3 CLT NA 7/02/2015
8 NY NA 03/03/2000
11 NY NA 04/8/2015
期望的结果
ID Location REGION LastUpdate
3 CLT NA 7/02/2015
11 NY NA 04/8/2015
假设 SQL 服务器 2005+:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Location ORDER BY LastUpdate DESC)
FROM dbo.YourTable
)
SELECT *
FROM CTE
WHERE RN = 1;
如果你想删除其他行,那么你应该这样做:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Location ORDER BY LastUpdate DESC)
FROM dbo.YourTable
)
DELETE FROM CTE
WHERE RN > 1;
使用 GROUP BY LOCATION, Region
,然后删除该集合中没有 MAX lastupdate
的所有其他行。
WITH CTE AS (SELECT MIN(ID), LOCATION, REGION, MAX(lastUpdate)
FROM YOURTABLE
GROUP BY LOCATION, REGION)
DELETE FROM YOURTABLE
WHERE NOT EXISTS (SELECT * FROM CTE WHERE A.ID=CTE.ID)
我试图在每个位置有多个用户的情况下保留一个用户。我还想保留最后更新的用户。
这是我的数据
ID Location REGION LastUpdate
1 CLT NA 1/15/2014
3 CLT NA 7/02/2015
8 NY NA 03/03/2000
11 NY NA 04/8/2015
期望的结果
ID Location REGION LastUpdate
3 CLT NA 7/02/2015
11 NY NA 04/8/2015
假设 SQL 服务器 2005+:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Location ORDER BY LastUpdate DESC)
FROM dbo.YourTable
)
SELECT *
FROM CTE
WHERE RN = 1;
如果你想删除其他行,那么你应该这样做:
;WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Location ORDER BY LastUpdate DESC)
FROM dbo.YourTable
)
DELETE FROM CTE
WHERE RN > 1;
使用 GROUP BY LOCATION, Region
,然后删除该集合中没有 MAX lastupdate
的所有其他行。
WITH CTE AS (SELECT MIN(ID), LOCATION, REGION, MAX(lastUpdate)
FROM YOURTABLE
GROUP BY LOCATION, REGION)
DELETE FROM YOURTABLE
WHERE NOT EXISTS (SELECT * FROM CTE WHERE A.ID=CTE.ID)