我有以下的表格redshift.
。| guest_id | 姓名 | rownum|||
|---|---|---|---|---|
| 1 | Safvan | |||
| 1 | 1 | 1 | 2 | Anandu |
我需要根據guest_id洗掉每個磁區的所有記錄,除了有max(rownum)的記錄。
結果應該是這樣的
事先感謝您的寶貴幫助。
uj5u.com熱心網友回復:
子查詢回傳 guest_id wise max row,然后與主表 JOIN,其中匹配 guest_id 和 max_row 不等于 row_num,然后執行 DELETE。
DELETE redshift
FROM redshift r
INNER JOIN (SELECT guest_id
, MAX(rownum) rownum
FROM redshift
GROUP BY guest_id) t
ON r.guest_id = t.guest_id
AND r.rownum != t.rownum
Please check from https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=47081e3517000949460932808ac9f09d
通過使用CTE洗掉重復的記錄
WITH t_cte AS (
SELECT *
, ROW_NUMBER() OVER(PARTITION BY guest_id ORDER BY rownum DESC) row_num
FROM redshift
)
DELETE[/span]。
FROM t_cte
WHERE row_num > 1
請從網址https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=86afb821ec0fe255333fd1cd01625f5a
uj5u.com熱心網友回復:
我的解決方案是 :
create table tables_rownum as (
select[/span
*,
row_number() over ( partition by guest_id
order by
rownum desc) as rownum_temp
來自的
table_orig)。)
delete from table_rownum where rownum_temp<>/span>1;
alter table table_rownum drop column rownum_temp;
truncate table table_orig;
insert into table_orig (select * from table_rownum) 。
drop table table_rownum;
如果有更好的解決方案,請提出建議。
uj5u.com熱心網友回復:
從表名中洗掉,where rownum not in (select max(rownum) from table name groupby column)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306817.html
標籤:
