2016-07-22 36 views
2

有一個包含數百個條目和六列的表。 「交易」列中的其中一列填充了空值,我們現在需要該列具有唯一值,現有條目是唯一的。MySQL按時間順序增量更新空列值

有一個'時間'日期時間列,理想情況下,'交易'列將逐步更新,整數從1開始按'時間'順序。

這看起來很簡單,但經過多次下載和恢復實時數據庫,它現在看起來不那麼簡單,一點幫助將不勝感激。

SQL Fiddle - Sample of live database

最終解決非常感謝胡安·卡洛斯·Oropeza的解決方案,併爲我耐心。

UPDATE `my_table` t1 
INNER JOIN (SELECT t.*, 
       @rownum := @rownum + 1 AS `rank` 
     FROM `my_table` t, 
      (SELECT @rownum := 0) r 
     ORDER BY time 
     ) t2 
ON t1.`id` = t2.`id` 
SET t1.`transaction` = t2.`rank` where t1.`transaction` is null 
+4

表有主鍵?向我們展示dbschema。 –

+0

該計劃旨在將「交易」列作爲主鍵,因爲它將是唯一的。我可以添加一個ID列作爲主鍵來完成這個任務,然後放下它。因爲它永遠不會被使用,所以擁有另一個ID列似乎並不有用。 –

+1

這就是爲什麼你應該把這個信息放在首位的問題上。現在請把你的創建表,也許我可以修復我的查詢。 –

回答

2

SQL Fiddle Demo

UPDATE Table1 t1 
INNER JOIN (SELECT t.*, 
        @rownum := @rownum + 1 AS `rank` 
      FROM Table1 t, 
       (SELECT @rownum := 0) r 
      // ORDER BY time use your datetime field 
      ) t2 
    ON t1.`ID` = t2.`ID` // You need a PK field 
SET t1.`value` = t2.`rank` // Update your sequence field 

架構

CREATE TABLE Table1 
    (`ID` int, `value` int) 
; 

INSERT INTO Table1 
    (`ID`, `value`) 
VALUES 
    (10, NULL), 
    (20, NULL), 
    (30, NULL) 
; 

OUTPUT

| ID | value | 
|----|-------| 
| 10 |  1 | 
| 20 |  2 | 
| 30 |  3 | 

編輯:

或者只是創建一個新的ID字段是PK

DEMO

alter table `wp_user_txs` add column `id` int(10) unsigned primary KEY AUTO_INCREMENT; 
+0

只有大約三分之一的值是NULL,其餘的值都不能被覆蓋,這就是我所說的「現有條目是唯一的」。 –

+1

再次,將這些信息放在問題中。非常令人沮喪的是,在我已經回答你的問題之後,你繼續添加限制:(把數據庫模式,樣本數據和慾望輸出刪除任何歧義從你的問題。請閱讀[**如何問問**](http:// stackoverflow .com/help/how-to-ask) \t \t這裏是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-to-post- at-sql-question-on-a-public-forum /)來學習如何提高你的問題質量,並獲得更好的答案 –

+0

檢查我的編輯,並讓我知道是否足夠,否則你有'auto_increment'列你可以使用我的第一個查詢來填充'transaction'列,只需添加'where transaction is null' –