所以我发现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 天内登录系统的所有不同人员的数量。
最佳答案
这回答了问题的原始版本。
在 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;
关于mysql - count(distinct(person_id)) 不适用于 MySQL 数据库中的窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916967/