我需要比较两行数据的重复,如果连续的行是相同的activityID,我需要注意一个是错误的。此代码无法正常工作
我的代码未正确测试。
SELECT
CASE
WHEN activityId = activityId +1 THEN activityId = 'error'
ELSE activityId = activityId
END AS sortOrder,recordId,
activityId,
started,
completed,
userId
FROM log1644
答案 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
仍然具有上一行的值。在语句的下一行中,当前行的值将分配给变量。