您不能訪問那樣的下一行或上一行。確切地說,實際上並不是真正的下一行或上一行,這意味着在數據庫中數據沒有特定的順序,而沒有指定它。只要您的查詢中沒有ORDER BY one_or_multiple_columns
,每次發出查詢時,您返回的結果可能會以另一種順序顯示。
這就是說,你有兩種可能性:
聯袂表本身就工作是這樣的
SELECT * FROM table alias_a
INNER JOIN table alias_b ON a.id = b.id + 1
然後一個CASE WHEN a.whatever = b.whatever THEN 'error' ELSE 'cool' END
會工作,但這可以很快變得醜陋,例如,當下一個ID不是+1
,但有時+2
,因爲您有時會刪除一行或其他原因。或者在性能方面,這可能很糟糕,無論如何...
我更喜歡在這種情況下使用變量。
SELECT
yt.*,
CASE WHEN @prevID = id THEN 'oops, same id as row before' ELSE 'another_id' END AS is_it_different,
@prevID := id
FROM your_table yt,
(SELECT @prevID := 0) table_alias__variable_initialization
ORDER BY id, another_column_determining_the_order_of_ids
如前所述,ORDER BY
在這裏很重要。
在CASE WHEN ...
變量@prevID
仍然具有前一行的值。在語句的下一行中,當前行的值被分配給變量。
請以文本形式發佈樣本數據和期望的輸出。 – peterm