SQL:选择最低值的行

时间:2014-09-06 01:55:35

标签: sql sql-server

我正在查看医院索赔数据,并且有多个行具有相同的入院日期。我只希望每个病人有一个入院日期。如果有多个行具有相同的录取日期,我想选择具有最大LOS的行,或者当LOS相等时,我想选择具有最早录取日期的行。例如,给出以下数据:

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而不是最低许可,但这也不是。

谢谢:)

2 个答案:

答案 0 :(得分: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为{{1}}。

答案 1 :(得分:0)

在MySQL中,这将是:

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