我需要比较两行数据的重复

时间:2013-12-17 10:13:59

标签: mysql

我需要比较两行数据的重复,如果连续的行是相同的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

1 个答案:

答案 0 :(得分: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仍然具有上一行的值。在语句的下一行中,当前行的值将分配给变量。