我有一個EID(event ID)和start_time組合主鍵的表。我有另一個名爲參加的專欄。涉及MySQL表中重複項目的計算
用戶通過重用事件ID和更改日期使他們的事件更受歡迎,但是,在此實例中,我在數據庫中創建了一個新行。
我想創建一個第四列,actual_attending等於出席值減去上一個事件的出席值。如果他們沒有以前的ID,則該列可以爲空。我如何通過更新來計算這個值。
這裏是一個sqlfiddle爲例:http://sqlfiddle.com/#!2/43f2c5
我有一個EID(event ID)和start_time組合主鍵的表。我有另一個名爲參加的專欄。涉及MySQL表中重複項目的計算
用戶通過重用事件ID和更改日期使他們的事件更受歡迎,但是,在此實例中,我在數據庫中創建了一個新行。
我想創建一個第四列,actual_attending等於出席值減去上一個事件的出席值。如果他們沒有以前的ID,則該列可以爲空。我如何通過更新來計算這個值。
這裏是一個sqlfiddle爲例:http://sqlfiddle.com/#!2/43f2c5
update event e1
set e1.actual_attending = (select e1.attending - e2.attending
from event e2
where e2.eid(+) = e1.previous_eid
)
我收到以下錯誤消息:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第4行')= e1.previous_eid )'處使用正確的語法'' –
SELECT a.*
, a.attending-b.attending new_actual_attending
FROM
(SELECT x.*
, COUNT(*) rank
FROM event x
JOIN event y
ON y.eid = x.eid
AND y.start_time <= x.start_time
GROUP
BY eid, start_time
) a
LEFT
JOIN
(SELECT x.*
, COUNT(*) rank
FROM event x
JOIN event y
ON y.eid = x.eid
AND y.start_time <= x.start_time
GROUP
BY eid, start_time
) b
ON b.eid = a.eid
AND b.rank = a.rank - 1;
+-----+------------+-----------+------------------+------+----------------------+
| eid | start_time | attending | actual_attending | rank | new_actual_attending |
+-----+------------+-----------+------------------+------+----------------------+
| 1 | 2013-06-08 | 29 | NULL | 1 | NULL |
| 2 | 2013-06-09 | 72 | NULL | 1 | NULL |
| 2 | 2013-06-16 | 104 | NULL | 2 | 32 |
| 3 | 2013-06-07 | 224 | NULL | 1 | NULL |
| 3 | 2013-06-14 | 222 | NULL | 2 | -2 |
+-----+------------+-----------+------------------+------+----------------------+
考慮提供建議一個sqlfiddle – Strawberry
現在提供的,謝謝。 –