我有一個按列ID
排序的SQLite表。但我需要通過另一個數字字段RunTime
對其進行分類。如何重新編號表列
CREATE TABLE Pass_2 AS
SELECT RunTime, PosLevel, PosX, PosY, Speed, ID
FROM Pass_1
表Pass_2
看起來不錯,但我需要從1 .. n
重新編號ID
列,而不訴諸記錄。
我有一個按列ID
排序的SQLite表。但我需要通過另一個數字字段RunTime
對其進行分類。如何重新編號表列
CREATE TABLE Pass_2 AS
SELECT RunTime, PosLevel, PosX, PosY, Speed, ID
FROM Pass_1
表Pass_2
看起來不錯,但我需要從1 .. n
重新編號ID
列,而不訴諸記錄。
這是一個SQL數據庫的原理,基礎表有沒有自然或保證訂單到他們的記錄。當使用ORDER BY
子句從表中輸入SELECT
時,必須指定要查看記錄的順序。
您可以使用SELECT * FROM your_table ORDER BY RunTime
獲取您想要的記錄,這是在任何SQL數據庫中執行此操作的正確且可靠的方法。
如果你想嘗試獲得在Pass_2
記錄爲「是」在運行系統命令,你可以在ORDER BY
條款添加到SELECT
您用於創建表,但請記住:你不能保證得到記錄按照它們被添加到表的順序返回。
什麼時候可以以不同的順序得到記錄?當您的查詢可以使用覆蓋索引中的列進行回答時,這很可能發生 - 在這種情況下,記錄更有可能以索引順序返回,而不是任何「自然」順序(但同樣,沒有使用ORDER BY
子句的保證)。
想象一下,表中的列值爲'1,2,5,9,3,7 ...'。我想用新值'1,2,3,4,5,6 ...'覆蓋該列。 – Nobby 2014-10-28 14:37:35
生成列表'1,2,4,9,3,7'的'ORDER BY'子句是什麼? – 2014-10-28 15:01:45
此外,請參閱此頁面https://www.sqlite.org/autoinc.html,以便將SQLite的隱藏'rowid'列作爲可能的*代理*用於添加到表格順序。 – 2014-10-28 15:05:05
如果您想要一個新的ID
列,從1
開始,則使用ROW_NUMBER()
函數。而不是ID
在您的查詢使用ROW_NUMBER() OVER(ORDER BY Runtime) AS ID....
這將取代舊的ID
列與一個新計算的列
你是什麼意思「重新排序(不是訴諸)1..n ID列沒有訴諸紀錄。」?您可以對行進行排序,也可以不排序。 – 2014-10-28 13:58:28