2017-01-16 91 views
2

我有一個表: -計算不同的列

+-----+--------------+--------------+----------+--------------------+---------------+-----------------+ 
| id | CustomerName | VideoQuality | IsActive | BufferedTime  | ElapsedTime | TotalBufferTime | 
+-----+--------------+--------------+----------+--------------------+---------------+-----------------+ 
| 139 | HotStar  | 180   | Yes  | 10.367167126617211 | 30.000000000 | NULL   | 
| 140 | HotStar  | 1300   | NULL  | 5.43524230876729 | 34.000000000 | NULL   | 
| 141 | HotStar  | 1300   | NULL  | 5.671054515212042 | 38.000000000 | NULL   | 
| 142 | HotStar  | 1300   | NULL  | 5.045639532902047 | 41.000000000 | NULL   | 
| 143 | HotStar  | 1300   | NULL  | 5.455747718023355 | 44.000000000 | NULL   | 
| 144 | HotStar  | 1300   | NULL  | 5.691559924468107 | 49.000000000 | NULL   | 

我要計算的列的bufferTime和ElapsedTime並插入輸出到TotalBufferTime列,但我想跳過的bufferTime的第一行。 因此,fisrt計算將是5.43 + 30.000秒計算將是5.67 + 34.00等等。 我也有一列IsActive,它顯示了緩衝時間的第一行。

我想要做這樣的事情: -

update RequestInfo SET `TotalBufferTime` = BufferedTime + ElapsedTime; 

我唯一想只跳過的列緩衝時間的第一行。

+2

您還需要確定行順序的字段。 SQL表中沒有固有的行順序。 –

+0

您的表中是否有任何主要字段? – Sadikhasan

+0

@Sadikhasan是我在表格中的id字段 –

回答

2

假設你一個字段id決定在你的錶行命令,你可以使用相關子查詢,以獲取前行的BufferedTime這樣的:

SELECT t1.CustomerName, t1.VideoQuality, t1.IsActive, t1.BufferedTime, 
     t1.ElapsedTime, 
     (SELECT t2.BufferedTime 
     FROM mytable AS t2 
     WHERE t2.td > t1.id 
     ORDER BY id LIMIT 1) + t1.ElapsedTime AS TotalBufferTime 
FROM mytable AS t1 
WHERE IsActive IS NULL 

編輯:

UPDATE您可以使用以下查詢:

SET @et = 0; 
SET @ElapsedTime = NULL; 

UPDATE RequestInfo 
SET TotalBufferTime = CASE 
         WHEN (@et := @ElapsedTime) < 0 THEN NULL 
         WHEN @ElapsedTime := ElapsedTime THEN BufferedTime + @et 
         END 
ORDER BY id; 

T他在這裏的技巧是使用CASE表達式,其中第一個WHEN子句是總是評估(因爲它是第一個),但是從來沒有爲真。這種方式@et變量被初始化爲值@ElapsedTime,即先前的記錄的值。

Demo here

+0

我收到錯誤錯誤代碼:1064.您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第6行附近使用正確的語法')AS TotalBufferTime FROM RequestInfo AS t1 WHERE IsActive IS NULL'at line 6 –

+0

@sonadas太多了一個括號。請檢查我所做的修改。 –

+0

謝謝它的作品,但它想保存更改 –