私は3つのMySQLテーブルを持っています:customers、persons、dates_d
customers
とpersons
関連しているagent_code
date_dは、過去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
各エージェントの顧客数がわかります。しかし、何人の顧客、すべてのエージェントが今週に入って、日ごとにグループ化されているかを知る必要があります。
私はそれほど難しいことではないことを知っています、そして私はそれを機能させる方法を多かれ少なかれ考えました:
- date_dとcustomersテーブルに参加します
- 顧客テーブルと人テーブルに参加します。
- 情報を日付でフィルタリングし、人ごと、日ごとにグループ化します。
だから私はそれを次のように表示することができます:
トーマス、ブライアン: 月曜日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);