这是我的用例:
我们有一个类似分析的工具,用来统计我们系统上每小时的用户数量。现在,该公司希望拥有一定数量的独特用户。由于我们的用户数量非常少,我们将使用
SELECT count(*)
FROM (
SELECT DISTINCT user_id
FROM unique users
WHERE date BETWEEN x and y
) distinct_users
即,我们将存储成对的user_id, date
,并使用DISTINCT
计算唯一用户(user_id不是外键,因为用户没有登录,它只是系统生成的唯一标识符,某种uuidv4)就数据量的性能而言,这非常有效。
现在的问题是在中导入遗留数据
我想知道转换的SQL查询
date | number_of_users
12:00 | 2
13:00 | 4
进入
date | user_id
12:00 | 1
12:00 | 2
13:00 | 1
13:00 | 2
13:00 | 3
13:00 | 4
(只要"计数但不是唯一的"返回与以前相同的数字,如果"唯一用户计数"有点偏离,我们就可以了)
当然,我可以编写python脚本,但我想知道是否有SQL技巧可以做到这一点,使用generate_series
或其他相关的
generate_series()
确实是一条路:
with data (date, number_of_users) as (
values
('12:00',2),
('13:00',4)
)
select d.date, i.n
from data d
cross join lateral generate_series(1, d.number_of_users) i (n)
order by d.date, i.n ;