2014-09-06 166 views
-1

我正在查看醫院索賠數據,並且有多個具有相同入學日期的行。我只需要每個病人一個入院日期。如果有多個具有相同入學日期的行,我想選擇具有最大LOS的行,或者當LOS相等時,我想選擇具有最早入學日期的行。例如,給出以下數據:SQL:選擇最低值行

ID  ADMIT  DC  LOS CLMID 
--  -----  --  --- ----- 
1  1-1-07 1-1-07 0 XXX 
1  1-2-07 1-2-07 0 XXX 
2  1-5-07 1-10-07 5 YYY 
3  2-8-07 2-8-07 0 ZZZ 
3  2-8-07 2-12-07 4 ZZZ 
3  2-8-07 2-10-07 2 ZZZ 

我希望選擇:

ID  ADMIT  DC  LOS CLMID 
--  -----  --  --- ----- 
1  1-1-07 1-1-07 0  XXX 
2  1-5-07 1-10-07 5  YYY 
3  2-8-07 2-12-07 4  ZZZ 

我使用MIN都彙集功能試過,但我敢失去了對如何讓我在那裏想。我是SQL新手,希望有任何幫助!

到目前爲止,這是我最好的拍攝:

SELECT DISTINCT 
    ID, ADMIT, DC, LOS, CLMID, MIN(ADMIT) 

FROM 
    TABLE1 

GROUP BY 
    ID, ADMIT, DC, LOS, CLMID 

ORDER BY 
    ID 

我也嘗試了只選擇最大LOS,而不是最低的承認,但不這樣做,要麼。

謝謝:)

+0

是'MySQL'還是'SQL Server'? – 2014-09-06 02:00:44

+1

發佈你最好的解決你的問題。 – 2014-09-06 02:02:23

+0

我很抱歉 - 這是SQL Server。我很新>< – Ashley 2014-09-06 02:03:28

回答

0

在MySQL中,這將是這樣的:

Select distinct ID, * from admissions_table order by DC DESC group by ID 
+0

你看過期望的輸出了嗎? – 2014-09-06 02:10:35

1

這是一個優先級,你就可以解決這些問題row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by id order by admit asc, los desc) as seqnum 
     from table1 t 
    ) t 
where seqnum = 1; 

有兩點要注意:

  • 我認爲日期實際上是作爲日期/時間存儲在數據庫中而不是字符串。
  • 第一段的條件有些含糊。這爲每個患者獲得最早的los最早的admit日期的一行。