2014-09-06 116 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日期的一行。