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)