アカウントには、毎年まで課金する必要があるアカウントがあるとします。日付付きSQLでの作業
したがって、発生した各料金について、日付を記載した表に行が生成されます。 残念ながら、何らかの理由により、特定の年に請求が拒否され、その年に行が生成されません。
私の目的は、料金が逃したアカウントとその年のすべてを見つけることです。
アカウントには、毎年まで課金する必要があるアカウントがあるとします。日付付きSQLでの作業
したがって、発生した各料金について、日付を記載した表に行が生成されます。 残念ながら、何らかの理由により、特定の年に請求が拒否され、その年に行が生成されません。
私の目的は、料金が逃したアカウントとその年のすべてを見つけることです。
下記の解決策では、未払いの年が見つかるでしょうが、あなたのテーブルにお支払いを示す年の間だけです。 はではなく、最初の年に支払が見落とされたか、受け取られなかった支払いが見つからなかったことがわかります。 (たとえば、支払額が2010年から2016年で、表に2012年、2013年、2015のみが表示されていれば、ソリューションは2014年を見つけることになりますが、2010年、2011年および2016年は見つかりません)。あなたのテーブルのデータは、それらの不足した支払いを見つけるのに十分ではありません。また、アカウントにお支払いがあっても、がとなった場合、そのアカウントはあなたのテーブルにはまったく存在しないため、解決策にはそれらのアカウントをキャッチできません。
with
test_data (acctno, chargetype, dt) as (
select 1, 'xyz', to_date('20-01-2014', 'dd-mm-yyyy') from dual union all
select 1, 'abc', to_date('20-01-2015', 'dd-mm-yyyy') from dual union all
select 1, 'xyz', to_date('20-01-2017', 'dd-mm-yyyy') from dual union all
select 2, 'xyz', to_date('20-01-2015', 'dd-mm-yyyy') from dual union all
select 2, 'xyz', to_date('20-01-2016', 'dd-mm-yyyy') from dual union all
select 2, 'xyz', to_date('20-01-2017', 'dd-mm-yyyy') from dual
)
-- End of test data (not part of the solution)
-- Query begins below this line; use your actual table name instead of "test_data"
select acctno, min_year + level - 1 as yr
from (
select acctno,
min(extract(year from dt)) min_year,
max(extract(year from dt)) max_year
from test_data
group by acctno
)
where (acctno, min_year + level - 1) not in (select acctno, extract(year from dt)
from test_data
)
connect by level <= max_year - min_year + 1
and prior acctno = acctno
and prior sys_guid() is not null
;
ACCTNO YR
------ ----
1 2016
に投稿しないでください。 – unleashed
テーブルの構造は何ですか?現在動作していないクエリは何ですか? –
ACCTNO chargetype日 1 XYZ 20-01-2014 1 ABC 20-01-2015 1 XYZ 20-01-2017 2 20-01 XYZ XYZ 20-01-2015 2 XYZ 20-01-2016 2 -2017 –
**あなたの質問に**いくつかのサンプルデータとそのデータに基づいて予想される出力を追加してください。 [**フォーマットされたテキスト**](http://stackoverflow.com/help/formatting)、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-on-so-asking-a-question/285557#285557)。不十分な質問に対する詳細な回答については、コードまたはその他の情報をコメント –