mysql - 使用 mysql 总共运行了 N 天
问题描述
我需要的是每天显示过去 5 天(包括
拆分到美国与非美国地理位置)中新 Droppers 的累积(移动)数量。报告列: DataTimstamp - 5 天时间范围的上限 Total - 时间范围内的新 Droppers 数量 Region_US - 新 Droppers 的数量 where country ='US' Region_rest - 新 Droppers 的数量 where country<>'US'< /p>
这是我的代码:
Create view new_droppers_per_date as Select date,country,count(dropperid) as num_new_customers
From(
Select dropper id,country,min(cast( LoginTimestamp as date)) as date
From droppers) as t1 group by date,country
Select DataTimstamp,region_us,region_rest from(
(Select date as DataTimstamp ,sum(num_new_customers) over(oreder by date range between 5
preceding and 1 preceding) as total
From new_droppers_per_date ) as t1 inner join
(Select date ,sum(num_new_customers) over(oreder by date range between 5 preceding and preceding)
as region_us
From new_droppers_per_date where country=”us”) as t2 on t1.date=t2.date inner join
(Select date, sum(num_new_customers) over(oreder by date range between 5 preceding and 1
preceding)
as region_rest
From new_droppers_per_date where country <>”us”) as t3 on t2.date=t3.date)
我想知道是否有任何更简单\更智能的方法可以在不使用这么多连接和视图的情况下做到这一点
感谢您的帮助:)
解决方案
这是使用窗口函数的一种方法。首先为每个的第一次登录分配一个标志DropperId
,然后按天汇总并计算新登录的次数。最后,制作一个包含过去 5 天sum()
的框架的窗口。range
select
LoginDay,
sum(CntNewDroppers) over(
order by LoginDay
range between interval 5 day preceding and current row
) RunningCntNewDroppers
from
select
date(LoginTimestamp) LoginDay,
sum(rn = 1) CntNewDroppers
from (
select
LoginTimestamp,
row_number() over(partition by DropperId order by LoginTimestamp) rn
from mytable
) t
) t
推荐阅读
- html - 更改“搜索和过滤”插件默认文本
- flutter - 在所有小部件上方显示 Snackbar
- c++ - 遍历向量缓冲区时的 C++ 非法操作
- performance - 与基于 HTTP/2 的 JSON 相比,gRPC 是否有任何性能优势,而不是大小?
- d3.js - 以编程方式设置 d3 缩放变换
- c# - 带有 Postgres 的 EF Core 无法翻译 Array.Contains() 查询
- c# - 从枚举类型中获取成员值、名称和自定义名称及其名称
- php - 如何在php中实现狄利克雷分布公式
- git - 如何从命令行创建拉取请求?
- wso2 - WSO2 通过 SCIM 检索用户信息时出错