我有一个具有以下结构的表。我需要返回该行之前和之后的记录的区域与该行的区域不同的所有行。这可能吗?我正在考虑在表本身上加入,但不知道该怎么做。
id | zip_code | district
__________________________
20063 10169 12
20064 10169 9
20065 10169 12
我有一个具有以下结构的表。我需要返回该行之前和之后的记录的区域与该行的区域不同的所有行。这可能吗?我正在考虑在表本身上加入,但不知道该怎么做。
id | zip_code | district
__________________________
20063 10169 12
20064 10169 9
20065 10169 12
假设“前”和“后”在 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
. 但请注意,您的示例中的所有三行都符合该标准,即使在这些行的上方和下方有长的十二行。