我是 SQL 的新手,我無法解決這種情況。
我有這張表:
Number code d_date
---------------------------------------
2054330994 SP41 11/23/2020 10:14:43
2054330994 SP41 11/23/2020 10:14:44
2054330994 SP41 11/23/2020 10:14:45
2054330994 SP41 11/23/2020 10:14:46
2054330994 SP41 11/23/2020 10:14:47
2054330994 SP41 11/23/2020 10:14:48
2054330994 SP41 11/23/2020 10:14:49
2054330994 SP41 11/23/2020 10:14:49
2054330994 SP41 11/23/2020 10:14:49
2054330994 SP41 11/23/2020 10:14:43
2054330995 SP41 11/23/2020 10:14:43
2054330995 SP41 11/23/2020 10:14:52
2054330995 SP41 11/23/2020 10:14:43
2054330995 SP41 11/23/2020 10:14:52
2054330995 SP41 11/23/2020 10:14:52
預期成績:
2054330994 SP41 11/23/2020 10:14:49
2054330995 SP41 11/23/2020 10:14:52
我們可以看到有很多重復的條目。
我的問題:我需要保留d_date最新條目的號碼。我們需要從同一個表中洗掉與此數字相關的剩余條目。
抱歉,我無法繼續。
提前致謝。
uj5u.com熱心網友回復:
要在沒有重復的情況下進行查詢,您可以在 Number & code 上聚合
SELECT "Number", code
, MAX(d_date) AS d_date
FROM your_table
GROUP BY "Number", code
ORDER BY "Number", code
或使用 ROW_NUMBER
SELECT "Number", code, d_date
FROM
(
SELECT "Number", code, d_date
, ROW_NUMBER() OVER (PARTITION BY "Number", code ORDER BY d_date DESC) AS rn
FROM your_table
) q
WHERE rn = 1
ORDER BY "Number", code;
要從表中洗掉重復項,也可以使用 row_number。
DELETE FROM your_table WHERE rowid IN ( SELECT rowid FROM ( SELECT "Number", code, d_date , ROW_NUMBER() OVER (PARTITION BY "Number", code ORDER BY d_date DESC) AS rn FROM your_table ) q WHERE rn > 1 );
SELECT * FROM your_table ORDER BY "Number", code, d_date
| 數字 | 代碼 | 日期 |
|---|---|---|
| 2054330994 | SP41 | 20 年 11 月 23 日 10.14.49.000000 |
| 2054330995 | SP41 | 20 年 11 月 23 日 10.14.52.000000 |
關于db<>fiddle 的演示在這里
uj5u.com熱心網友回復:
從表中洗掉,如你所說:
前:
SQL> select * from test order by num, code, d_date;
NUM CODE D_DATE
---------- ---- --------------------
994 SP41 11/23/2020 10:14:43
994 SP41 11/23/2020 10:14:43
994 SP41 11/23/2020 10:14:46
994 SP41 11/23/2020 10:14:49
994 SP41 11/23/2020 10:14:49
995 SP41 11/23/2020 10:14:43
995 SP41 11/23/2020 10:14:52
995 SP41 11/23/2020 10:14:52
995 SP41 11/23/2020 10:14:52
9 rows selected.
洗掉:
SQL> delete from test a
2 where a.rowid not in
3 (select rowid
4 from (select row_number () over (partition by num, code
5 order by d_date desc) rn,
6 rowid
7 from test
8 )
9 where rn = 1
10 );
7 rows deleted.
后:
SQL> select * from test order by num, code, d_date;
NUM CODE D_DATE
---------- ---- --------------------
994 SP41 11/23/2020 10:14:49
995 SP41 11/23/2020 10:14:52
SQL>
uj5u.com熱心網友回復:
我試過下面的查詢,它似乎按預期作業。
DELETE FROM table_name WHERE d_date != (SELECT MAX(t2.d_date) FROM table_name t2 WHERE t2.number = table_name.number);
我不知道它會在哪種情況下失敗,但就我目前的情況而言,它正在按 exprcted 的方式作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398205.html
