0

私は SQL の使用に非常に慣れていないため、私の質問に答えていると思われる以前の投稿を見つけることができませんでした。データベース内のすべての顧客と、その提出に関連するすべての行/列のデータについて、承認された最新の提出を提供するステートメントが必要です。各送信には一意の ID 番号が割り当てられ、ASMT_ID という列に表示されます。固有の顧客 ID 番号は、PRTPT_ID という列です。

したがって、データベース T_FINANCIAL_ITEM 内の各 PRTPT_ID について、各顧客の MAX ASMT_ID を見つけて、各 PRTPT_ID に関連付けられたデータのすべての列と行を表示したいと考えていますが、STTS_NAME が「承認済み」と等しい場合のみです。

私の簡単な言葉で私がやろうとしていること:

select * from T_FINANCIAL_ITEM
For each PRTPT_ID SELECT MAX ASMT_ID
WHERE STTS_NAME = 'Approved'
GROUP by PRTPT_ID

* UPDATE * asmt_id を使用するのではなく、同じテーブルの FYE_DT と SUBM_TYPE の他の 2 つのフィールドを分析する必要があります。

基準は次のとおりです。

  1. stts_name 'Approved' を持つ最新の FYE_DT (つまり、2010 年より前の 2011 年)。
  2. 最新の fye_dt では、監査された subm_type
  3. 最新の fye_dt で、それらが監査されていない subm_type でない場合、監査されていない subm_type
  4. 基準を満たす送信に関連付けられたデータのすべての行を取得します

例えば:

PRTPT_ID    ASMT_ID FYE_DT                       SUBM_TYPE_NAME  
8493000000  18016   30-JUN-09 12.00.00.000000000 AM Unaudited/A-133  
8493000000  19574   30-JUN-09 12.00.00.000000000 AM Audited/A-133  
8493000000  28039   30-JUN-10 12.00.00.000000000 AM Unaudited/A-133  
8493000000  33620   30-JUN-10 12.00.00.000000000 AM Audited/A-133  
9481000000  38049   31-DEC-10 12.00.00.000000000 AM Unaudited/Non-A133  
9481000000  58020   31-DEC-09 12.00.00.000000000 AM Audited/Non-A-133  
9481000000  48139   31-DEC-11 12.00.00.000000000 AM Unaudited/Non-A-133  

結果:

PRTPT_ID    ASMT_ID FYE_DT                       SUBM_TYPE_NAME  
8493000000  33620   30-JUN-10 12.00.00.000000000 AM Audited/A-133  
9481000000  48139   31-DEC-11 12.00.00.000000000 AM Unaudited/Non-A-133  

注: これらの結果には、複数のデータ行が関連付けられている場合があります。すべてのデータ行が必要です。

4

2 に答える 2

2

比較的標準的なアプローチの 1 つは、分析関数を使用することです。あなたの更新を理解していれば、ORDER BY句を次のようにしたいようです

select *
  from (select t.*,
               rank() over (partition by prtpt_id
                                      order by fye_dt desc,
                                               (case when subm_type_name like 'Audited%'
                                                     then 2
                                                     when subm_type_name like 'Unaudited%'
                                                     then 1
                                                     else 0
                                                  end) desc) rnk
          from t_financial_item t
         where stts_name = 'Approved')
 where rnk = 1
于 2012-04-09T18:38:19.927 に答える
0

あなたのテーブル構造は何ですか?これはあなたが探しているもののようです:

select MAX(ASMT_ID),PRTPT_ID from PRTPT_ID_TABLE p
   INNER JOIN ASMT_ID_TABLE a on p.PRTPT_ID = a.PRTPT_ID
   WHERE STTS_NAME = 'Approved' 
   GROUP by PRTPT_ID

しかし、テーブルが表示されません。T_FINANCIAL_ITEM はテーブル名ですか、それともデータベース名ですか?

于 2012-04-09T17:38:15.103 に答える