繁体   English   中英

参数化聚集的最佳方法

[英]Best approach to parametrized aggregates

我正在为我的应用收集分析数据。 对于我跟踪的每个指标,我允许在7天,30天或90天的时间间隔内查看它,并按日期,工作日或一天中的时间进行分组。

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

是否可以避免对每个指标执行6个不同的查询6(每个间隔1个,每个分组1个)?

会话中位数响应时间(按星期几分组) Analytic(mon, tue, wed..)

中位会话响应时间(按一天中的时间分组) Analytic(1 am, 2 am, 3 am..)

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

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

对不起,混合了一点posgressql和sql-server。 @ ...(例如,@ 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或某种形式,以确保数据类型一致,但应该可以使您到达那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM