假設您正在處理SQL的實現支持它們,您可以使用分析功能,如在(未經)
select streetname
,first_value(housenumber) over (order by streetname, housenumber partition by district) as from
,last_value(housenumber) over (order by streetname, housenumber partition by district) as to
,district
from table
編輯的行FIRST_VALUE
和LAST_VALUE
:該查詢不工作,但事沿着這些線應該。
EDIT2:這裏是一個(有點令人費解)的方式來做到這一點
select *
from (
select streetname
,district
,from_num
,coalesce(to_num,lead(to_num,1) over (partition by streetname order by housenumber)) as to_num
from (
select streetname
,housenumber
,district
,case when coalesce(lag(district,1) over (partition by streetname order by housenumber),'') <> district then housenumber end as from_num
,case when coalesce(lead(district,1) over (partition by streetname order by housenumber),'') <> district then housenumber end as to_num
from table
)
where from_num is not null or to_num is not null
)
where from_num is not null
這在DB2測試。我不知道MaxDB,因此您可能需要修改語法。 至於發生了什麼事的解釋:
- 在第一通(最裏面的子查詢),我期待在第一次(即,當先前的小區比當前的不同)和去年(即,當未來地區將與當前不同)按街道名稱和門牌號排序的每個地區組的記錄。如果第一個,那麼我把房子號碼存儲爲'from';如果最後一個,我將它存儲爲'to'
- 從那以後,我只選擇每個組的第一個和最後一個記錄(即那些'from'或'to'值填入的那些記錄。 1到每組最多2條記錄對於沒有填入'to'值的每條記錄,我填寫下一條記錄中的記錄
- 所有剩下要做的是從這個子結果中選擇只有那些填寫,這兩個值的記錄,瞧
什麼數據庫系統? –
最初數據來自MaxDB(SAP)數據庫。我目前正試圖在MySQL數據庫(4.7) – user3433650
@ user3433650中使用建議的「FIRST」和「LAST」-Value,因此您的查詢應該可以在MaxDB中運行,對吧? –