参数化聚合的最佳方法

问题描述:

我正在收集我的应用的分析。对于我跟踪的每个指标,我允许在7天,30天或90天的时间间隔内查看它,以及按日期,星期几或一天中的时间进行分组。参数化聚合的最佳方法

处理这个问题的最佳方法是什么?

是否有可能避免针对每个度量标准执行6个不同的查询6(每个间隔1个,每个分组一个)?

平均会话响应时间(按星期几组)Analytic(mon, tue, wed..)

平均会话响应时间(按天的时间组)Analytic(1 am, 2 am, 3 am..)

新对话(按星期几组) Analytic(mon, tue, wed..)

新对话(按日期分组)Analytic(20 aug, 19 aug, 18 aug etc...)

+4

示例数据。期望的结果。示例查询来传达您的问题。 –

+0

对不起,添加了一些 – Tarlen

+0

原谅我,但我看不到任何示例数据,所需结果或示例查询。我只看到头脑风暴的解释(?)。什么是'Analytic()'...一个Postgres函数?你是一个普通的SO用户。当然,你知道如何构建(甚至可能会问过去的OP)是否有一个可重复的例子。 – Parfait

对不起混合一点posgressql白色sql服务器。 @ ...(例如@Param)是变量的sql-server语法我不知道postgressql的语法,但希望这仍然可以说明这种技术。

SELECT 
    date 
    ,CASE 
     WHEN @Param = 'date' THEN date AS 
     WHEN @Param = 'dow' THEN EXTRACT(DOW FROM date) 
     .... 
     ELSE 
    END as ParamGRoup 
    ,SUM(amount) as TotalAmount 
FROM 
    Table 
WHERE 
    date BETWEEN @LowDateParam TO @HighDateParam 
GROUP BY 
    date 
    ,CASE 
     WHEN @Param = 'date' THEN date AS 
     WHEN @Param = 'dow' THEN EXTRACT(DOW FROM date) 
     .... 
     ELSE 
    END as ParamGRoup 

我在你把你的例子拿出来之前输入了这个,所以我希望它仍然清楚。无论如何,你可以做的一个方法是使用case语句,然后按相同的case语句进行分组。您可能必须将case语句的THEN/Else部分作为VARCHAR或其他类型来强制转换,以确保数据类型一致,如果它有可能按多个级别进行分组,但它应该可以让您到达那里。