在MySQL数据库中count(distinct(person_id))无法与窗口函数一起使用

时间:2018-08-19 10:59:14

标签: mysql sql database relational-database analytics

因此,我发现mysql不支持将诸如count(distinct(person_id))之类的聚合函数与窗口函数一起使用。例如,以下查询将不起作用。

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天的时间范围内统计所有签入系统的不同人员的数量。

1 个答案:

答案 0 :(得分:0)

这回答了问题的原始版本。

在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;