2010-11-04 88 views
1

当前查询的MAX:的Oracle SQL选择返回的值

SELECT DISTINCT "HSP"."HSP_ACCOUNT_ID", "HSP"."HSP_ACCOUNT_NAME", "HSP"."ADM_DATE_TIME", "HSP"."DISCH_DATE_TIME", 
        "HSP"."TOT_CHGS", "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID", "HSP_ACCT_MULT_DRGS"."DRG_MPI_CODE" 

FROM "C"."HSP" "HSP" LEFT OUTER JOIN "C"."HSP_ACCT_MULT_DRGS" "HSP_ACCT_MULT_DRGS" 
     ON "HSP"."HSP_ACCOUNT_ID"="HSP_ACCT_MULT_DRGS"."HSP_ACCOUNT_ID" 

WHERE ("HSP"."DISCH_DATE_TIME">=TO_DATE ('01-10-2009 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
     AND "HSP"."DISCH_DATE_TIME"<TO_DATE ('01-10-2010 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) 
     AND ( "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=34 OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10825 
      OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10826 OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10827) 

ORDER BY "HSP"."HSP_ACCOUNT_ID" 

结果:

HSP_ACCOUNT_ID HSP_ACCOUNT_NAME ADM_DATE_TIME DISCH_DATE_TIME TOT_CHGS DRG_ID_TYPE_ID DRG_MPI_CODE 
4444 Betty Lou 06/01/09 10/01/09  $53,356 10827 444 
4444 Betty Lou 06/02/09 10/01/09  $53,356 10826 444 
5555 Big Bird 09/08/09 10/01/09  $50,203 10827 555 
5555 Big Bird 09/09/09 10/01/09  $50,203 10826 555 
6666 Hoots Owl 11/03/09 10/05/09  $28,693 10826 666 
6666 Hoots Owl 11/04/09 10/05/09  $28,693 10827 666 
7777 Rodeo Rosie 09/29/09 10/01/09  $32,201 10827 777 
7777 Rodeo Rosie 09/30/09 10/01/09  $32,201 10826 777 
8888 Oscar Gro 09/27/09 10/01/09  $33,600 10826 888 
8888 Oscar Gro 09/28/09 10/01/09  $33,600 10827 888 

我会考虑全部脱落在我的输出这些重复的错误。我真的只想说要显示最大(DRG_ID_TYPE_ID)帐户,但不确定如何更改我的SQL查询。因此,一个良好的输出会看起来像:

HSP_ACCOUNT_ID HSP_ACCOUNT_NAME ADM_DATE_TIME DISCH_DATE_TIME TOT_CHGS DRG_ID_TYPE_ID DRG_MPI_CODE 
4444 Betty Lou 39965 40087.58611 53355.58 10827 444 
5555 Big Bird 40064 40087.53125 50203.28 10827 555 
6666 Hoots Owl 40121 40091.60694 28692.9  10827 666 
7777 Rodeo Rosie 40085 40087.54236 32201.43 10827 777 
8888 Oscar Gro 40084 40087.76319 33600.14 10827 888 

我不能说具体哪里DRG_ID_TYPE_ID = 10827,因为有些账户可能只有10826,我想回来。

+0

难道这Crystal Reports相关以任何方式? – 2010-11-05 10:59:26

+0

它从Crystal报表生成的SQL。 – Cimplicity 2010-11-05 16:55:14

回答

2

添加MAX(DRG_ID_TYPE_ID) OVER (PARTITION BY HSP_ACCOUNT_ID)

SELECT DISTINCT 
"HSP"."HSP_ACCOUNT_ID", 
"HSP"."HSP_ACCOUNT_NAME", 
"HSP"."ADM_DATE_TIME", 
"HSP"."DISCH_DATE_TIME", 
"HSP"."TOT_CHGS", 
MAX("HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID") OVER (PARTITION BY "HSP"."HSP_ACCOUNT_ID") , 
"HSP_ACCT_MULT_DRGS"."DRG_MPI_CODE" 

FROM "C"."HSP" "HSP" LEFT OUTER JOIN "C"."HSP_ACCT_MULT_DRGS" "HSP_ACCT_MULT_DRGS" 
     ON "HSP"."HSP_ACCOUNT_ID"="HSP_ACCT_MULT_DRGS"."HSP_ACCOUNT_ID" 

WHERE ("HSP"."DISCH_DATE_TIME">=TO_DATE ('01-10-2009 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
     AND "HSP"."DISCH_DATE_TIME"<TO_DATE ('01-10-2010 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) 
     AND ( "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=34 OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10825 
      OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10826 OR "HSP_ACCT_MULT_DRGS"."DRG_ID_TYPE_ID"=10827) 

ORDER BY "HSP"."HSP_ACCOUNT_ID" 
+0

我已经添加了一个'DISTINCT',否则这将返回额外的行(尽管相同)。 – 2010-11-05 05:15:18

+0

确实,如果“MAX(DRG_ID_TYPE_ID)”带来多于一行;如果不是这样,“MAX OVER PARTITION”将在没有DISTINCT的情况下执行。但不能确定发布的结果集。 – MaLo 2010-11-05 09:06:35