Sql 每天计数重复记录(无窗口功能)
我每天都在尝试获取重复的客户记录,但在使用MariaDB 10.1时遇到了一些问题,因为直到10.2才引入窗口函数(因此没有分区、排名等) 我有一组数据示例,如下所示:Sql 每天计数重复记录(无窗口功能),sql,mariadb,mariadb-10.1,Sql,Mariadb,Mariadb 10.1,我每天都在尝试获取重复的客户记录,但在使用MariaDB 10.1时遇到了一些问题,因为直到10.2才引入窗口函数(因此没有分区、排名等) 我有一组数据示例,如下所示: | Date | Country | Type | Email | Response_Time | | ---------- | ------- | --------- | ------------- | ------------- | | 2021-05-21 | AU | En
| 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 |
| 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 |
可通过以下查询生成上述内容:
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')
;
我希望获得在日期、国家和类型组中多次出现的电子邮件地址计数,并将其显示为如下摘要:
| 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 |
| 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 |
重复每日计数是电子邮件地址在日期、国家和类型组中出现多次的记录计数。Volume是每个国家/地区和类型的记录总数
在这个版本的MariaDB中,由于缺少窗口功能,我感到很难过,如果您能提供帮助,我将不胜感激
(对于格式化为代码的表格表示歉意,我在尝试以其他方式发布时遇到格式化错误)Hmmm。我认为这是两个层次的聚合:
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
什么是“卷”?卷只是该组记录的总数。我会编辑这篇文章。
UK
不应该是预期结果的一部分,因为jane@fake.com
在表中只显示一次,不会重复。正确,重复日列显示英国查询为0,但仍有大量交互(1),平均响应时间。