2013-12-17 48 views
0

我需要比較兩行數據重複,如果連續的行是相同的activityID我需要指出一個是錯誤的。這個代碼不工作,我希望我需要比較兩行數據重複

This should throw an error

我的代碼是不正確的測試。

SELECT 
    CASE 
     WHEN activityId = activityId +1 THEN activityId = 'error' 
      ELSE activityId = activityId 
     END AS sortOrder,recordId, 
         activityId, 
         started, 
         completed, 
         userId 

    FROM log1644 
+2

請以文本形式發佈樣本數據和期望的輸出。 – peterm

回答

0

您不能訪問那樣的下一行或上一行。確切地說,實際上並不是真正的下一行或上一行,這意味着在數據庫中數據沒有特定的順序,而沒有指定它。只要您的查詢中沒有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仍然具有前一行的值。在語句的下一行中,當前行的值被分配給變量。

+0

@Portlight反饋會很好... – fancyPants