Mysql 动态SQL查询以选择季度并对数据执行聚合
因此,我需要做的是根据历史数据为每个季度创建点击/印象。历史数据是相同的,只是日期不同,现在要为本季度创建(点击/印象),值将是Mysql 动态SQL查询以选择季度并对数据执行聚合,mysql,sql,Mysql,Sql,因此,我需要做的是根据历史数据为每个季度创建点击/印象。历史数据是相同的,只是日期不同,现在要为本季度创建(点击/印象),值将是 sl.. Country Channel Type Clicks Spend Impressions Date 1. india Social a 14 $25 1,331 2/11/2021 2. india Search b
sl.. Country Channel Type Clicks Spend Impressions Date
1. india Social a 14 $25 1,331 2/11/2021
2. india Search b 1,748 $1,801 1,166,140 2/11/2021
3. india Display c 28,615 $3,901 8,279,595 2/11/2021
4. india Display a 1,500 $1,000 1,233 7/10/2020
5. india Display a 11,500 $500 5,133 10/1/2020
6. india Display a 599 $200 6570 1/1/2020
我需要where子句中的帮助,我需要在为任何季度生成点击/印象时仅从某些特定季度选择数据,选择逻辑为:
select sum(clicks)/sum(impressions)
from table_name
groupby (country, channel, type)
where ________
我们需要从日期列中查找季度和年份。
我的意思是,如果我们进入下一个季度,那么我需要比较过去两个季度和去年同一季度的平均值
我写代码是为了找到从日期算起的季度和年份,但是如何继续呢
Sum(clicks(q3 2020,q4 2020, q1 2020))/Sum(impressions(q3 2020,q4 2020, q1 2020))
期望输出
CASE
WHEN EXTRACT(MONTH FROM day) BETWEEN 7 AND 9 THEN 'Q1'
WHEN EXTRACT(MONTH FROM day) BETWEEN 10 AND 12 THEN 'Q2'
WHEN EXTRACT(MONTH FROM day) BETWEEN 1 AND 3 THEN 'Q3'
WHEN EXTRACT(MONTH FROM day) BETWEEN 4 AND 6 THEN 'Q4'
END AS quarter,
EXTRACT(Year FROM day) AS Year
当你试图过滤数据时,不要对数据做复杂的数学运算,也不要过滤结果。这需要处理整个表,然后丢弃不需要的行 相反,在filter参数中进行数学运算,这将允许数据库通过检查索引和只加载它需要的行来完成过滤 例如
slno. quarter clicks/impressions
1. Q1 2021 0.53
2. Q4 2020 1.35
.......
选择
总和(点击)/总和(印象)
从…起
你的桌子
哪里
(日期>='2020-07-01'和日期<'2021-01-01')
或(日期>='2020-01-01'和日期<'2020-04-01')
这确保您只处理2020年最后两个季度以及2020年第一季度的数据
接下来的问题是,如何根据今天的日期计算出这些日期
本季度的开始可以通过以下方式提供
如果将该计算结果存储在名为@CurrentQuarterStart的变量中,WHERE子句将变为this
SELECT
SUM(clicks) / SUM(impressions)
FROM
yourTable
WHERE
(Date >= '2020-07-01' AND Date < '2021-01-01')
OR (Date >= '2020-01-01' AND Date < '2020-04-01')
在哪里
(日期>=@CurrentQuarterStart-间隔2个季度和日期<@CurrentQuarterStart)
或(日期>=@CurrentQuarterStart-间隔4个季度和日期>@CurrentQuarterStart-间隔3个季度)
以创建表格+插入(或创建小提琴)的形式提供样本数据/为该数据提供所需的输出(带说明)。指定精确的MySQL版本。欢迎使用SO。请看,请原谅打字错误,我在打电话。。。
WHERE
(Date >= @CurrentQuarterStart - INTERVAL 2 QUARTERS AND Date < @CurrentQuarterStart)
OR (Date >= @CurrentQuarterStart - INTERVAL 4 QUARTERS AND Date < @CurrentQuarterStart - INTERVAL 3 QUARTERS)