SQL Server 2008:根据多个列过滤掉重复的行

时间:2009-12-20 23:28:52

标签: sql sql-server sql-server-2008

感谢所有帮助我解决上一个问题的人。这是一个类似的问题,但现在我对我想要的东西有了更好的了解。我再次使用MS SQL Server 2008,并且我试图找出一个超出我一周SQL经验的查询。

现在我有以下简单查询

SELECT pl.val, pl.txt_val, pl.id
FROM dm.labs pl
  WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999;
    AND pl.val IS NOT NULL
ORDER BY pl.val;

在此表中,每行对应于患者实验室值的结果。问题是对于一些患者来说,有些行实际上是同一实验室阅读的多个副本。有一列pl.lab_filed_dts(日期时间数据类型)给出了实验室的日期。

我想做的是:

编辑:如果两个(或更多)行具有相同的id,相同的val和相同的lab_filed_dts,无论其值是多少在任何其他列中,我只想从其中一行返回valtxt_valid(无论哪一行都无关紧要。)

编辑:如果两行具有相同的id,相同的val,以及lab_filed_dts AND的相同日期部分(但不一定是时间)其中一个lab_filed_dts的时间部分是午夜,我想从val时间不到的行返回txt_validlab_filed_dts午夜。

再次感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题:

SELECT pl.val, pl.txt_val, pl.id
FROM dm.labs pl
  WHERE pl.lab_nm = 'CK (CPK)' 
    AND pl.val < 999999;
    AND pl.val IS NOT NULL
GROUP BY  pl.val, pl.txt_val, pl.id, cast(lab_filed_dts as date)
HAVING lab_filed_dts =  max(lab_filed_dts)
ORDER BY pl.val;  

/ *已将pl.vak更改为pl.val,因为您无法在不在select的列上订购,我认为它只是一种类型* /