2016-08-20 102 views
0

我正在收集我的應用的分析。對於我跟蹤的每個指標,我允許在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

回答

0

對不起混合一點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或其他類型來強制轉換,以確保數據類型一致,如果它有可能按多個級別進行分組,但它應該可以讓您到達那裏。