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

*更新* 我需要分析同一个表 FYE_DT 和 SUBM_TYPE 中的另外两个字段,而不是使用 asmt_id。

标准是:

  1. stts_name 为“已批准”的最新 FYE_DT(即 2010 年之前的 2011 年)。
  2. 在最近的 fye_dt 中,审计的 subm_type
  3. 在最近的 fye_dt 中,如果他们是 no audited subm_type,则 unaudied 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

一种相对标准的方法是使用分析函数。如果我了解您的更新,听起来您希望该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 回答