我有以下查询。
我得到了一个返回的结果集,看起来像这样:
select * from
(
SELECT distinct
rx.patid
,rx.fillDate
,rx.scriptEndDate
,MAX(datediff(day, rx.filldate, rx.scriptenddate)) AS longestScript
,rx.drugClass
,COUNT(rx.drugName) over(partition by rx.patid,rx.fillDate,rx.drugclass) as distinctFamilies
FROM [I 3 SCI control].dbo.rx
where rx.drugClass in ('h3a','h6h','h4b','h2f','h2s','j7c','h2e')
GROUP BY rx.patid, rx.fillDate, rx.scriptEndDate,rx.drugName,rx.drugClass
) r
order by distinctFamilies desc
这将产生类似于的结果。
这应该意味着在表中的两个日期之间,patID应该有5个独特的药物名称。然而,当我运行以下查询时:
select distinct *
from rx
where patid = 1358801781 and fillDate between '2008-10-17' and '2008-11-16' and drugClass='H4B'
我得到了一个返回的结果集,看起来像这样:
。
你可以看到,在2008年10月17日至2009年01月15日期间,第二个查询返回了五行数据,但只有三个唯一的名称。我尝试了多种修改over子句的方法,但都没有成功。如何修改查询以便在指定时间范围内仅找到唯一的药品名称?
distinctFamilies
列。但是,您可以看到,事实上只有三个独特的药品名称。 - wootscootinboogiecount(distinct fieldname1) over(partition by fieldname2)
可以解决你的问题。然而,在SQL Server 8中,'count(distinct fieldname)'会报错,所以你需要尝试另一种方法。 - Saju