2017-06-08 46 views
-3

我正在嘗試編寫一個查詢,其中排除了具有三個相同日期值ie的meter_nos。 1-3的關係。使用Oracle SQL的子查詢

該查詢只能顯示具有不同日期的meter_nos,即1-1關係。

任何人都可以幫忙嗎?

...and a.mtr_id in (select b.mtr_id 
       from ci_mtr_config b 
       where a.mtr_id=b.mtr_id 
       group by b.mtr_id 
       having count(b.mtr_id)=3) 
    and a.mtr_id not in (select f.eff_dttm 
       from ci_mtr_config f 
        where a.mtr_id=f.mtr_id 
        group by f.eff_dttm 
        having count(f.eff_dttm)=3) 

這不起作用:我是一個樣本下方卡住

繼承人。

+1

編輯你的問題,並提供樣本數據,預期的效果,並且你已經嘗試的代碼更加準確。 –

+0

如果您閱讀以下內容,您將得到更快的答案:https://stackoverflow.com/help/mcve *(並按照上面的建議)* –

回答

1

嘗試使用COUNT(*)OVER(PARTITION BY ....)來計算共享相同儀表和日期的行數。然後過濾該計算。

CREATE TABLE CI_MTR_CONFIG 
    (MTR_ID INT, EFF_DTTM DATE) 
; 

INSERT INTO CI_MTR_CONFIG 
    (MTR_ID, EFF_DTTM) 
    VALUES 
    (303, to_date('2017-01-01','yyyy-mm-dd')), 
    (303, to_date('2017-01-01','yyyy-mm-dd')), 
    (303, to_date('2017-01-01','yyyy-mm-dd')), 
    (202, to_date('2017-01-01','yyyy-mm-dd')), 
    (202, to_date('2017-01-01','yyyy-mm-dd')), 
    (101, to_date('2017-01-01','yyyy-mm-dd')) 
; 

select 
    * 
from (
     select 
      *, count(*) over(partition by MTR_ID, EFF_DTTM) as count_of 
     from CI_MTR_CONFIG 
    ) d 
where count_of = 1 

從上面的樣本數據只返回計量器101。

注意如果EFF_DTTM信息比日常使用TRUNC()

count(*) over(partition by MTR_ID, TRUNC(EFF_DTTM)) as count_of 
+0

如何在主查詢中顯示count_of = 1,它不工作 @ used_by_already –

+0

在srkect子句中包含** count_of **。如果查詢不起作用,您還沒有正確實施。再次檢查。 –

+0

順便說一句,「不工作」和「不滿足我的需求」之間有區別。不工作給我說它會產生一個錯誤,因此你沒有正確實施。示例查詢的運行沒有錯誤。 –