2017-06-08 7 views
-3

私は同じ日付の3つの値を持つ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

Editを使用し、サンプルデータ、望ましい結果、あなたがしようとしているコードを提供するよりも正確である場合。 –

+0

https://stackoverflow.com/help/mcve *(そして上記のアドバイスに従ってください)* –

答えて

1

は同じメーターと日付を共有する行の数をカウントするCOUNT(*)OVER(.... BY PARTITION)を使用してみてください。その計算でフィルタリングします。

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

途中で "働いていない"と "私のニーズを満たしていない"の間に違いがあります。私にはうまくいかないので、エラーが発生し、正しく実装されていないという。サンプルクエリはエラーなしで実行されます。 –

関連する問題