2015-11-19 44 views
0

我正在嘗試爲數據集中的每個走廊查找最大的milage走廊段數。我用這個非常類似的查詢找出最小milage,或增加方向走廊第一段和這個工作得很好:查找數據集中每個走廊的最大里程數參考

select distinct t.corridor_code_rb,t.frfpost,t.trfpost 
from SEC_SEGMENTS t 
where t.dir = 'I' and t.lane = 1 
and t.frfpost = (select min(s.frfpost) from SEC_SEGMENTS s) 
order by 1,2 

然而,當我嘗試使用類似的查詢發現最大的問題出現(最後一段中增加方向)用下面的查詢走廊長度:

select distinct t.corridor_code_rb,t.frfpost,t.trfpost 
from SEC_SEGMENTS t 
where t.dir = 'I' and t.lane = 1 
and t.trfpost = (select max(s.trfpost) from SEC_SEGMENTS s) 
group by t.corridor_code_rb,t.frfpost,t.trfpost 

當我運行此查詢是隻輸出第一走廊最高milage段會發生什麼,然後停止。而最低的查詢,它返回每個走廊的輸出,這是我想要的。 frfpost是每個部分的開始英里,trfpost是結尾的milage。所以frfpost是'來自參考帖子',而trfpost是'參考帖子'。每條走廊通常在與其他走廊之間的路口之間分成長度介於5至40英里之間的路段。我試圖找到每個走廊的最後部分,因此問題出在哪裏。

+0

什麼是你的DBMS?它支持RANK嗎? – dnoeth

+0

我使用pl-sql開發人員。我不知道排名 –

回答

1

您還需要group by corridor_code_rb以獲得每個corridor_code_rb該列的max值。然後join它到主表。

select t.corridor_code_rb,t.frfpost,t.trfpost 
from SEC_SEGMENTS t 
join (select corridor_code_rb, max(s.trfpost) as trfpost from SEC_SEGMENTS 
     group by corridor_code_rb) s 
on t.trfpost = s.trfpost 
where t.dir = 'I' and t.lane = 1 
1

基於您的評論你似乎使用Oracle,它支持解析函數:

Select corridor_code_rb, frfpost, tropfst 
from 
(
    select corridor_code_rb, frfpost, trfpost, 
     ROW_NUMBER()      -- rank the rows 
     OVER (PARTITION BY corridor_code_rb -- for each corridor 
      ORDER BY trfpost DESC) AS rn -- by descending direction 
    from SEC_SEGMENTS t 
    where t.dir = 'I' and t.lane = 1 
) dt 
WHERE rn = 1 -- filter the last row 
相關問題