SQL开发人员为每个ID选择最大记录和整行
我对使用SQL非常陌生,我还没有找到任何以前的帖子来回答我的问题。我需要一份声明,该声明将为数据库中的每个客户提供最新批准的提交,以及与该提交相关的所有数据行/列。每次提交都会分配一个唯一的id号,并位于一个名为ASMT_id的列中。唯一的客户id号是一个名为PRTPT_id的列 因此,对于数据库T_FINANCIAL_项中的每个PRTPT_ID,我希望找到每个客户的最大ASMT_ID,并显示与每个PRTPT_ID关联的所有列和行数据,但前提是STT_名称等于“Approved” 简单地说,我想做的是:SQL开发人员为每个ID选择最大记录和整行,sql,oracle,Sql,Oracle,我对使用SQL非常陌生,我还没有找到任何以前的帖子来回答我的问题。我需要一份声明,该声明将为数据库中的每个客户提供最新批准的提交,以及与该提交相关的所有数据行/列。每次提交都会分配一个唯一的id号,并位于一个名为ASMT_id的列中。唯一的客户id号是一个名为PRTPT_id的列 因此,对于数据库T_FINANCIAL_项中的每个PRTPT_ID,我希望找到每个客户的最大ASMT_ID,并显示与每个PRTPT_ID关联的所有列和行数据,但前提是STT_名称等于“Approved” 简单地说,我想
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
标准是:
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
注意:可以有多行数据与这些结果关联。我需要所有的数据行 你的桌子结构是什么?这似乎就是您正在寻找的:
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
但是我没有看到任何桌子。财务项目是表还是数据库名称?一种相对标准的方法是使用分析函数。如果我理解您的更新,那么听起来您希望
orderby
子句类似于
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
你在使用什么数据库?标题中的“SQL Developer”是否意味着您正在使用Oracle数据库和Oracle SQL Developer前端?SQL的哪种风格?MSSQL/MYSQL/Oracle等?@JustinCave是的,我正在使用Oracle SQL Developer front-endT_FINANCIAL_ITEM是表名我输入了以下语句:从T_FINANCIAL_ITEM中选择MAX(ASMT_ID),PRTPT_ID,其中STT_NAME=‘Approved’GROUP by PRTPT_ID;看起来它找到了max记录,但它没有为每个PRTPT_i引入所有数据行/列。如果您需要针对自身加入表,那么您的第一种方法似乎可行,但它只为max记录引入一行数据。我需要与max记录关联的所有数据行。@Craig_C-我更新了我的答案以使用
rank
函数,而不是row_number
。如果可以有多行具有相同的asmt\u id
,则将返回多行。不过,我觉得这是您描述中唯一的值,所以我不确定怎么会有重复的行。如果我的编辑对您没有帮助,那么发布一些示例数据和预期输出会很有帮助,这样我们可以更好地为您提供帮助。asmt_id代表一个唯一的提交,但每个提交下都报告了多个程序。每个程序在不同的行上报告,这就是我需要所有行的原因您修改后的声明非常有效。然而,我发现了一个新的转折点
max asmt_id并不总是提供最新记录。因此,我现在需要分析的是同一个表中年份和提交类型字段的组合。我首先需要最近一年和经审计的提交类型,如果最近一年没有经审计的提交,则查看未经审计的提交。更糟糕的是,有不止一种类型的已审核和未审核提交类型。例如未审计/未审计和未审计/A-133。我可以提供更多的细节,如果必要的话@Craig_C-一些样本数据和预期输出肯定会有帮助。不过,请编辑您的问题以发布该信息,而不是将其放在评论中。