2

私は3つのMySQLテーブルを持っています:customers、persons、dates_d

customerspersons関連している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

各エージェントの顧客数がわかります。しかし、何人の顧客、すべてのエージェントが今週に入って、日ごとにグループ化されているかを知る必要があります。

私はそれほど難しいことではないことを知っています、そして私はそれを機能させる方法を多かれ少なかれ考えました:

  1. date_dとcustomersテーブルに参加します
  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 に答える