簡體   English   中英

每天計算重復記錄(沒有 window 函數)

[英]Count repeat records per day (without window functions)

我試圖每天計算重復客戶記錄,但在使用 MariaDB 10.1 時遇到了一些麻煩,因為 window 函數直到 10.2 才引入(因此沒有分區、排名等)

我有一組示例數據,如下所示:

| Date       | Country | Type      | Email         | Response_Time |
| ---------- | ------- | --------- | ------------- | ------------- |
| 2021-05-21 | AU      | Enquiry   | bill@fake.com | 910           |
| 2021-05-21 | AU      | Enquiry   | bill@fake.com | 1050          |
| 2021-05-21 | NZ      | Complaint | jim@fake.com  | 56            |
| 2021-05-22 | NZ      | Enquiry   | jim@fake.com  | 1000          |
| 2021-05-22 | NZ      | Enquiry   | jim@fake.com  | 845           |
| 2021-05-22 | NZ      | Enquiry   | jim@fake.com  | 700           |
| 2021-05-22 | NZ      | Complaint | jim@fake.com  | 217           |
| 2021-05-23 | UK      | Enquiry   | jane@fake.com | 843           |
| 2021-05-23 | NZ      | Enquiry   | jim@fake.com  | 1795          |
| 2021-05-23 | NZ      | Enquiry   | jim@fake.com  | 521           |
| 2021-05-23 | AU      | Complaint | bill@fake.com | 150           |

可以使用以下查詢生成上述內容:

SELECT
    DATE(Start_Time) AS "Date",
    Country,
    Type,
    Email,
    Response_Time
FROM EMAIL_DETAIL
WHERE DATE(Start_Time) BETWEEN '2021-05-21' AND '2021-05-23'
AND COUNTRY IN ('AU','NZ','UK')
;

我想計算在日期、國家和類型組中出現多次的 email 地址的數量,並將其顯示為如下摘要:

| Country | Type      | Volume | Avg_Response_Time | Repeat_Daily |
| ------- | --------- | ------ | ----------------- | ------------ |
| AU      | Enquiry   | 2      | 980               | 1            |
| AU      | Complaint | 1      | 150               | 0            |
| NZ      | Enquiry   | 5      | 972               | 3            |
| NZ      | Complaint | 1      | 137               | 0            |
| UK      | Enquiry   | 1      | 843               | 0            |

每日重復計數是 email 地址在日期、國家和類型組中出現多次的記錄計數。 卷是每個國家和類型的記錄總數。

在這個版本的 MariaDB 中缺少 window 函數,我很難過,任何幫助都將不勝感激。

(對於格式化為代碼的表格,我在嘗試以其他方式發布時遇到格式錯誤)

嗯。 . . 我認為這是兩個級別的聚合:

SELECT country, type, SUM(cnt) as volume,
       SUM(Total_Response_Time) / SUM(cnt) as avg_Response_time,
       SUM(CASE WHEN cnt > 1 THEN cnt ELSE 0 END) as repeat_daily
FROM (SELECT DATE(Start_Time) AS "Date", Country, Type, Email,
             SUM(Response_Time) as Total_Response_Time, COUNT(*) as cnt
      FROM EMAIL_DETAIL
      WHERE DATE(Start_Time) BETWEEN '2021-05-21' AND '2021-05-23' AND
            COUNTRY IN ('AU','NZ','UK')
      GROUP BY date, country, type, email
     ) ed
GROUP BY country, type
select Date,Country, Type, AVG(Response_Time) ,sum(cc) as Volumn, sum(case when cc>1 then 1 end) as Repeat_Daily
from (
SELECT
    DATE(Start_Time) AS "Date",
    Country,
    Type,
    count(email) cc,    
    AVG(Response_Time) Response_Time
FROM EMAIL_DETAIL
WHERE DATE(Start_Time) BETWEEN '2021-05-21' AND '2021-05-23'
  AND COUNTRY IN ('AU','NZ','UK')
group by 
  DATE(Start_Time) AS "Date",
    Country,Type, email
)
group by "Date",Country,Type

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM