SQL 中的唯一访问次数

Posted

技术标签:

【中文标题】SQL 中的唯一访问次数【英文标题】:Number of Unique Visits in SQL 【发布时间】:2014-08-27 13:17:05 【问题描述】:

我正在使用Postgres 9.1 来计算给定时间段内唯一患者就诊的次数,并使用为每位患者输入的发票。

我有两列,transactions.ptnumbertransactions.dateofservice,可以按以下方式计算患者就诊次数:

select count(*)
from transactions 
where transactions.dateofservice between '2012-01-01' and '2013-12-31'

问题在于,有时一位患者可能会在同一天收到两张发票,但这应该算作一次患者就诊。

如果我在transactions.ptnumber 列上使用SELECT DISTINCTGROUP BY,这将计算就诊的患者人数(但不计入就诊次数)。

如果我在transactions.dateofservice 列上使用SELECT DISTINCTGROUP 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:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?

Google BigQuery SQL:计算来自其他商店的用户

如何设置sqlserver2008访问次数

利用分析函数减少对表访问次数