SQL 中的唯一访问次数
Posted
技术标签:
【中文标题】SQL 中的唯一访问次数【英文标题】:Number of Unique Visits in SQL 【发布时间】:2014-08-27 13:17:05 【问题描述】:我正在使用Postgres 9.1
来计算给定时间段内唯一患者就诊的次数,并使用为每位患者输入的发票。
我有两列,transactions.ptnumber
和 transactions.dateofservice
,可以按以下方式计算患者就诊次数:
select count(*)
from transactions
where transactions.dateofservice between '2012-01-01' and '2013-12-31'
问题在于,有时一位患者可能会在同一天收到两张发票,但这应该算作一次患者就诊。
如果我在transactions.ptnumber
列上使用SELECT DISTINCT
或GROUP BY
,这将计算就诊的患者人数(但不计入就诊次数)。
如果我在transactions.dateofservice
列上使用SELECT DISTINCT
或GROUP BY
,这将计算有发票的天数。
不知道如何处理。
【问题讨论】:
【参考方案1】:这将每天返回唯一的患者。
select count(distinct transactions.ptnumber) as cnt
from transactions
where transactions.dateofservice between '2012-01-01' and '2013-12-31'
group by transactions.dateofservice
您可以将它们汇总以获得整个期间的独特患者
select sum(cnt) from (
select count(distinct transactions.ptnumber) as cnt
from transactions
where transactions.dateofservice between '2012-01-01' and '2013-12-31'
group by transactions.dateofservice
)
【讨论】:
【参考方案2】:你可以使用子选择,考虑
Select count(*)
from (select ptnumber, dateofservice
from transactions
where dateofservice between '2012-01-01' and '2013-12-31'
group by ptnumber, dateofservice
)
您可能还希望将其设为存储过程,以便可以在日期范围内传递。
【讨论】:
我很欣赏所有三个答案 - 都以独特的方法正确。我没有意识到的是,可以执行 SELECT DISTINCT ptnumber, dateofservice 以获得每个 dateofservice 的唯一 ptnumber。这是一种简单直接的方法,效果非常好。谢谢。 @kipsoft 请考虑为好的答案投票并接受最适合您的答案!很高兴我们能提供帮助:-) 对不起。我昨天确实投了赞成票。会再试一次。不知道为什么没有。【参考方案3】:有多种方法可以实现这一点,但您可以使用WITH
子句构造一个包含唯一访问的临时表,然后计算结果!
WITH UniqueVisits AS
(SELECT DISTINCT transactions.ptnumber, transactions.dateofservice
FROM transactions
WHERE transactions.dateofservice between '2012-01-01' and '2013-12-31')
SELECT COUNT(*) FROM UniqueVisits
【讨论】:
以上是关于SQL 中的唯一访问次数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL 2005 中循环访问多个登录条目并计算登录次数和时间?
BIG QUERY SQL:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?