2017-09-25 130 views
-1

我有一個選擇與子選擇內連接等等。但是從這個結果來看,我希望它能夠爲我帶來OidBilling專欄中最大的記錄。下面是選擇的例子和它帶來的結果的例子,以便更容易理解我想要的結果。選擇列最大

select address_block_uc 
     ,address_complement_uc 
     ,u.name_uc 
     ,m.description_meter 
     ,m.serial_number_meter 
     ,lst.date_read date_read 
     ,value_read 
     ,tm.name_type_meter 
     ,lst.concentrator 
     ,lst.port 
     ,m.oid_uc 
     ,m.oid_meter 
     ,m.type_constant 
     ,f.first_measur 
     ,lst.id_system 
     ,ib.read0 
     ,ib.oid_individual_billing 
     ,get_correction_factor(lst.id_system, m.oid_meter, m.oid_uc, lst.date_read) corr_factor 
     ,get_correction_pulse(lst.id_system, lst.concentrator, lst.port, lst.date_read) corr_pulse 
     ,nvl(f.first_measur,0) + (i.value_read * m.type_constant) leitura 
from (select id_system 
      ,concentrator 
      ,port 
      ,date_read 
      ,m.oid_uc 
      ,m.oid_meter 
     from rs_individual_read i 
      ,rs_uc u, rs_meter m 
      ,rs_counters c 
     where m.oid_meter = c.oid_meter 
     and c.concentrator_counters = i.concentrator 
     and c.port_counters = i.port 
     and date_read between to_date ('01/03/2017 23:00:00','dd/MM/yyyy HH24:MI:SS') and to_date ('25/03/2017 23:00:00','dd/MM/yyyy HH24:MI:SS') 
     and date_read between c.dt_init and c.dt_end 
     and date_read between m.dt_init and m.dt_end 
     and u.oid_system=i.id_system 
     and m.oid_uc=u.oid_uc 
     and i.id_system=531 
     and m.oid_meter=69451 
     group by id_system 
       ,concentrator 
       ,i.port 
       ,date_read 
       ,m.oid_uc 
       ,m.oid_meter) lst 
inner join rs_individual_read i 
on (i.id_system = lst.id_system 
    and i.date_read = lst.date_read 
    and i.concentrator = lst.concentrator 
    and i.port = lst.port) 
inner join rs_counters c 
on (c.concentrator_counters = lst.concentrator 
    and c.port_counters = lst.port 
    and lst.date_read between c.dt_init and c.dt_end) 
inner join rs_meter m 
on (m.oid_meter = c.oid_meter 
    and m.oid_meter = lst.oid_meter 
    and lst.date_read between m.dt_init and m.dt_end) 
inner join rs_uc u 
on (u.oid_system = lst.id_system 
and u.oid_uc = lst.oid_uc 
and u.oid_uc = m.oid_uc) 
inner join rs_type_meter tm 
on (m.oid_type_meter = tm.oid_type_meter) 
inner join rs_individual_billing ib 
on (ib.serial_number = m.serial_number_meter) 
left outer join rs_first_measurs f 
on (f.oid_meter = m.oid_meter) 
order by date_read desc 
     ,address_block_uc 
     ,address_complement_uc 
     ,name_uc 

結果:

DATE_READ OID_INDIVIDUAL_BILLING LEITURA                 
20/03/2017 23:00 8500 800                 
20/03/2017 23:00 8791 800                 
20/03/2017 23:00 8628 800                 
19/03/2017 23:00 8500 450,971                 
19/03/2017 23:00 8628 450,971                 
19/03/2017 23:00 8791 450,971                 
19/03/2017 23:00 8791 450,653                 
19/03/2017 23:00 8500 450,653                 
19/03/2017 23:00 8628 450,653                 
19/03/2017 12:00 8628 450,653                 
19/03/2017 12:00 8791 450,653                 

這樣做的結果是帶來了在報告中一些重複的時間表,併爲它不重複,我想結果,使僅列的更大的數據例如,在日期19/03/2017 23:00hs,我們有3個寄存器的同一日期的oid_individual_billing,但是我希望它只顯示8791行,​​這是該記錄的oid_individual_illing列的最大ID ...任何人都可以幫我?

我總結了便於發佈的列。

對不起,我的英語來自谷歌翻譯

Tks!

+0

嗨,你從上面提到的查詢結果中提到的3行。只保留第8791行的邏輯是什麼(如果我沒有弄錯的話,這是兩個)例如WHERE OID_INDIVIDUAL_OID = 8791 ??? –

+0

您好,首先感謝您的迴應,並感謝您對嘗試提供幫助的興趣。 我會盡量總結想要8971線的邏輯,這一行這個ID 8971是這個日期插入的最後一個。我清楚了嗎? – brizola727

+0

如果我有一種方法來插入一個最大列,通過放入選擇「我希望最大的oid_billing for date x」看起來很完美。但我不知道該怎麼做 – brizola727

回答

0

我去回答和它的工作原理,請按照以下幫助別人在未來

inner join (select serial_number, max(read0) read0 from rs_individual_billing group by serial_number) temp 
    on (temp.serial_number = m.serial_number_meter) 

TKS!