错误代码:1235。此版本的 MariaDB 尚不支持 'COUNT(DISTINCT) aggregate as window function'

Error Code: 1235. This version of MariaDB doesn't yet support 'COUNT(DISTINCT) aggregate as window function'

我在 MariaDB 上有以下 table:

date              name

2018-01-02        John
2018-01-03        Mary
2018-01-05        Peter
2018-01-06        John
2018-01-07        Ann
2018-01-08        Ann
2018-01-09        John
2018-01-10        Peter

我想每天计算 cumulated_name_count。即我期待我的结果:

date        cumulated_name_count

2018-01-02        1
2018-01-03        2
2018-01-04        2
2018-01-05        3
2018-01-06        3
2018-01-07        4
2018-01-08        4
2018-01-09        4
2018-01-10        4

为此,我将以下代码与 window 函数一起使用:

select date, 
  count(distinct name) over (order by time rows unbounded preceding) 
  as cumulated_name_count from myDB.myTable

但是,我收到以下错误:

Error Code: 1235. This version of MariaDB doesn't yet support 'COUNT(DISTINCT) aggregate as window function'

有没有办法避免此类错误并通过 window 函数获取累计计数?谢谢!

您可以使用嵌套的 window 函数执行此操作:

select date, 
       sum( seqnum = 1 ) over (order by time rows unbounded preceding)
              as cumulated_name_count
    from (select  t.*,
                  row_number() over (partition by name order by time)
                        as seqnum
              from myDB.myTable t
         ) t2;

子查询按时间枚举每个name值。然后外部查询计算每条记录中“1”的个数。