回答
這裏是我會怎麼做:
;WITH cte AS (
SELECT valeur, date_reference, id, rownum = ROW_NUMBER() OVER (ORDER BY date_reference) FROM #temperatures
UNION ALL
SELECT NULL, NULL, NULL, (SELECT COUNT(*) FROM #temperatures) + 1
)
SELECT A.* FROM cte AS A INNER JOIN cte AS B ON A.rownum + 1 = B.rownum AND COALESCE(a.valeur, -459) != COALESCE(b.valeur, -459)
我打電話表#temperatures。使用CTE爲每條記錄分配一個ROW_NUMBER
,並在最後一個Row_Number
中包含一條額外記錄(否則最後一條記錄將不會包含在以下查詢中)。然後,來自CTE的SELECT
,其中下一個ROW_NUMBER
不具有相同的valeur
。
現在,如果您想要從原始表格中刪除DELETE
,您可以查看此查詢的返回信息,以確保您確實想刪除不在此返回中的所有記錄。然後,假設historique_id
是主鍵,DELETE FROM #temperatures WHERE historique_id NOT IN (SELECT historique_id FROM cte AS A...
。
謝謝你的夥伴 – Hamza
您可以收集想要保留在臨時表中的所有行,truncate
您的原始表,並將臨時表中的所有行插入原始表中。如果你有「很多重複」,這將比刪除行更有效。此外truncate table
有以下限制
你不能對錶使用TRUNCATE TABLE:
- 被一個外鍵約束引用。 (可以截斷帶有引用自身的外鍵的 表。)
- 參與索引視圖。
- 通過使用事務複製或合併 複製發佈。
- TRUNCATE TABLE無法激活觸發器,因爲操作確實沒有記錄單獨的行刪除 。欲瞭解更多信息,請參閱CREATE TRIGGER (Transact-SQL)
在SQL Azure的數據倉庫和並行數據倉庫:
- TRUNCATE TABLE是不允許的EXPLAIN語句內。
- TRUNCATE TABLE不能在事務內部運行。
您可以在下列主題中找到更多信息。
Deleting Data in SQL Server with TRUNCATE vs DELETE commands
你可以使用這個腳本通過截斷,插入戰略
CREATE TABLE #temp_hisorique(
code varchar(50),
code_trim varchar(50),
libelle varchar(50),
unite varchar(50),
valeur varchar(50),
date_reference datetime,
hisoriqueID int
)
GO
;WITH cte AS (
select *, row_number() over(partition by code, code_trim, libelle, unite, valeur order by date_reference desc) as rownum
from mytable
)
insert into #temp_hisorique(code, code_trim, libelle, unite, valeur, date_reference, hisoriqueID)
select code, code_trim, libelle, unite, valeur, date_reference, hisoriqueID
from cte
where rownum = 1
TRUNCATE TABLE mytable
insert into mytable(code, code_trim, libelle, unite, valeur, date_reference, hisoriqueID)
select code, code_trim, libelle, unite, valeur, date_reference, hisoriqueID
from #temp_hisorique
去除重複行或者你可以只是刪除命令刪除的行與加盟。
;WITH cte AS (
select *, row_number() over(partition by code, code_trim, libelle, unite, valeur order by date_reference desc) as rownum
from mytable
)
delete T
from mytable T
join cte on T.hisoriqueID = cte.hisoriqueID
where cte.rownum > 1
- 1. 刪除Mysql表中的重複行並只保留一行
- 2. 連續轉換後的近似行爲
- 3. 刪除重複的行,只保留最低的ID
- 4. MySQL的刪除連續行
- 5. 刪除連續的行
- 6. 刪除相似的行
- 7. 只保留某一行並刪除C#中的其餘部分
- 8. 只保留觀察連續
- 9. 最短的方式GROUP BY相似的值,並保留最新的行?
- 10. Oracle SQL - 刪除重複並保留具有最大值的行
- 11. VBA:如何刪除行並根據條件保留一些行?
- 12. 刪除空間並保留新行?
- 13. 跨非連續行的批行刪除
- 14. 如何保留一行並刪除mysql中的重複項?
- 15. 只保留1號線每4行並刪除其他線路
- 16. 刪除所有連續的空行,只留下一個過程:perl -00 -pe'
- 17. mysql保留最後5行並刪除舊記錄
- 18. 如何保持連續的最大值並刪除剩餘的值?
- 19. 刪除txt文檔中的重複行並保留一行?
- 20. 如何刪除後面的所有數字並只保留最後一個
- 21. MySQL的刪除重複的連續行
- 22. 如何刪除保留其他唯一行的重複行?
- 23. 刪除與類似關鍵字行,如果它們出現在連續的行
- 24. 我可以刪除所有行,但只保留一行嗎?
- 25. 如何刪除唯一行並保留重複項? SQL
- 26. 從csv保留行中刪除換行
- 27. 連續刪除按鈕上保留的EditText的內容Android
- 28. SQL如何刪除特定列的重複行並保留一行
- 29. 的jqGrid只在屏幕上刪除行並保存刪除的行
- 30. 保留最近的3個文件夾並刪除其餘的bash腳本?
刪除它們從表中刪除?或者是一個返回不同記錄的查詢?代碼,code_trim,libelle,unite和valeur的定義是否相同? –
這樣的事情? https://stackoverflow.com/questions/19432913/select-info-from-table-where-row-has-max-date/19433107#19433107 – Twelfth
可能重複[檢索每個組中的最後一條記錄](https:/ /stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group) –