我有一个具有以下结构的表。我需要返回紧接在行之前和紧跟在行之后的记录区域与该行的区域不同的所有行。这可能吗?我正在考虑加入桌面本身,但不知道该怎么做。
id | zip_code | district
__________________________
20063 10169 12
20064 10169 9
20065 10169 12
答案 0 :(得分:4)
假设“前面”和“后面”在ID列的意义上,您可以这样做:
select *
from zip_codes z1
inner join zip_codes z2 on z1.id=z2.id + 1
inner join zip_codes z3 on z1.id=z3.id - 1
where z1.district <> z2.district and z1.district <> z3.district
这将自动过滤掉第一行和最后一行,因为inner join
s,如果需要计算,请将其更改为left outer join
。
此外,还会检查它是否与两者不同。要查找它是否与其中任何一个不同(如评论中暗示的那样),请将and
子句中的where
更改为or
。但请注意,那么,您的示例中的所有三行都符合该条件,即使这些行的上方和下方都有长行。