2010-11-04 85 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