我想得到最小/最大的房子号码,这是一个简单的任务。
但是有一个专栏包含了一个地区。
原始数据:

Street Name | House Number | district
Hauptstr.   |          1   |    A
Hauptstr.   |          2   |    A
Hauptstr.   |          3   |    B
Hauptstr.   |          4   |    B
Hauptstr.   |          5   |    A

期望输出:
Street Name | House number (FROM) |  House number (TO) |  district
Hauptstr.   |          1          |           2        |     A
Hauptstr.   |          3          |           4        |     B
Hauptstr.   |          5          |           5        |     A

我的输出:
Street Name | House number (FROM) |  House number (TO) |  district
Hauptstr.   |          1          |           5        |     A
Hauptstr.   |          3          |           4        |     B

我乐于接受各种意见和建议。我需要一个临时表来处理地址吗?
提前谢谢你。

最佳答案

在MySQL中可以使用变量来实现这一点。它为每行相邻的街道值指定一个组:

select street, district, min(housenumber), max(housenumber)
from (select t.*,
             (@grp := if(@d = district, @grp,
                         if(@d := district, @grp + 1, @grp + 1)
                        )
             ) as grp
      from t cross join
           (select @d := '', @grp := 0) params
      order by street, housenumber
     ) t
group by grp, street, district;

08-07 00:36