2

我有三个 MySQL 表:customers、persons 和 dates_d

customers并且persons通过agent_code

dates_d 只是一个包含过去 10 年和接下来 10 年的所有日期的表。

该密钥允许我确定每个人输入了多少客户。我还有另一个带有输入客户日期的键,因此我可以查询数据库并查看每个月、年、周等输入了多少客户...

如果我运行以下查询,我当前的数据库示例包含去年 8 月的记录:

 SELECT COUNT(customers.hash) FROM customers
 LEFT JOIN persons ON persons.agent_code
 WHERE customers.agent_code = persons.agent_code
 GROUP BY customers.agent_code

它会告诉我每个代理的客户数量。但我需要知道有多少客户,每个代理进入当前一周,并按天分组。

我知道这并不难,我或多或少想到了一种使它起作用的方法:

  1. 加入 dates_d 和客户表
  2. 加入客户表和人员表。
  3. 按日期过滤信息并按人、按天分组。

所以我可以将其显示为:

托马斯,布莱恩:

星期一 17: 20 位顾客
星期二 18:12 位顾客。
19 日星期三:3 位顾客。
星期四 20: 0 客户

等等。

再一次,我一直在尝试不同的查询,但我无法从数据库中找到我需要的信息。我不是在询问具体的查询,但是任何能指引我正确方向的帮助都将不胜感激!

谢谢!

编辑 1:示例数据:

CREATE TABLE IF NOT EXISTS `customers` (
  `hash` varchar(32) NOT NULL,
  `date_joined` date NOT NULL,
  `agent_code` int(5) NOT NULL DEFAULT '0',
  PRIMARY KEY (`hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `customers` (`hash`, `date_joined`, `agent_code`) VALUES
('0323619e9dd37726ad9aede6b8941022', '2012-09-17', 20004),
('0a5a74acc39773c191b87b759799b0c0', '2012-08-02', 22109),
('1aa4d97ba79dce047d519efe3832b5e5', '2012-07-19', 22109),
('2605578b2e35f01f473591d8f3ed3c51', '2012-08-06', 20003),
('26ce0904a6ea30da9b181a301937664e', '2012-07-30', 20003);




 CREATE TABLE IF NOT EXISTS `persons` (
  `agent_code` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`agent_code`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;



  INSERT INTO `persons` (`agent_code`) VALUES
  (20003),(20004);
4

2 回答 2

1

这是你想要的?下面的查询显示了agent_code20003 年的结果。您可以根据需要添加基于日期的条件(例如日期范围或指定星期)。

您可以在这里看到它的实际效果。

询问

SELECT DATE_FORMAT(customers.date_joined, '%W %e') AS 'dt', persons.agent_code AS 'agent', COUNT(*) AS 'customers'
FROM customers 
INNER JOIN persons ON persons.agent_code = customers.agent_code
WHERE persons.agent_code = 20003
GROUP BY customers.date_joined, persons.agent_code

结果

| DT | 代理 | 客户 |
---------------------------------
| 星期一 30 | 20003 | 1 |
| 星期一 6 | 20003 | 1 |
于 2012-09-17T23:54:00.580 回答
0

本周:

select c.agent_code, c.date_joined, count(c.hash) 
from 
    customers c
    left join 
    persons p on p.agent_code = c.agent_code
where weekofyear(date_joined) = weekofyear(current_date) 
group by c.agent_code, c.date_joined
;
+------------+-------------+---------------+
| agent_code | date_joined | count(c.hash) |
+------------+-------------+---------------+
|      20004 | 2012-09-17  |             1 |
+------------+-------------+---------------+

如果您想要另一周,请替换current_date该周内的任何日期。

于 2012-09-17T23:54:26.727 回答