感谢所有帮助我解决上一个问题的人。这是一个类似的问题,但现在我对我想要的东西有了更好的了解。我再次使用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
,无论其值是多少在任何其他列中,我只想从其中一行返回val
,txt_val
和id
(无论哪一行都无关紧要。)
编辑:如果两行具有相同的id
,相同的val
,以及lab_filed_dts
AND的相同日期部分(但不一定是时间)其中一个lab_filed_dts
的时间部分是午夜,我想从val
时间不到的行返回txt_val
,id
和lab_filed_dts
午夜。
再次感谢大家的帮助!
答案 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
的列上订购,我认为它只是一种类型* /