count(distinct(person\u id))不使用mysql数据库中的窗口函数

vq8itlhq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(453)

所以我发现mysql不支持像count(distinct(person\u id))这样的聚合函数与window函数一起使用。例如,下面的查询将不起作用。

select count(distinct(person_id)) over ([OrderBy clause])
from <table>;

与窗口函数一样快速工作的问题的替代方法是什么?
架构:

create table table1(
check_date date,
person_id  varchar(10)
);

我尝试的查询:

select person_id,count(distinct(person_id))
over (order by check_date range between interval '20' day preceding and current row)
from table1;

需要在20天的窗口框架内获得所有不同人员的数量。

tquggr8v

tquggr8v1#

这回答了问题的原始版本。
在mysql 8+中,可以使用两个窗口函数来模拟这一点:

select sum(seqnum = 1) over (order by ?) as num_distinct
from (select t.*,
             row_number() over (partition by person_id order by ?) as seqnum
      from <table> t
     ) t;

相关问题