私は次のテーブル構造を持っています:
CREATE TABLE `client_notes` (
`id` bigint(20) NOT NULL,
`client_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`note` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`datepost` datetime NOT NULL
) ENGINE=MyISAM
ここでは、ユーザーがクライアントに挿入したメモを保存します。すべてclient_id
にいくつかのメモがあり、によって追加されuser_id
ます。目標は、ブローカーが最初のノートを追加した回数をカウントすることです(追加オプションは、たとえばwhere
条項で今週の期間になる可能性があります)
+----+----------+-----------------------------+
| id | broker_id| client | datepost |
+----+---------+------------------------------+
| 1 | 1 | 10 | 29-11-2017 10:00:00| <- this is first note for this client
| 2 | 2 | 10 | 29-11-2017 10:20:00|
| 3 | 2 | 15 | 28-11-2017 10:10:00| <- this is first note for this client
| 4 | 1 | 15 | 28-11-2017 10:20:00|
| 5 | 1 | 15 | 28-11-2017 10:30:00|
+----+----------+--------+--------------------+
出力は次のようになります。
+-----------+-------+
| broker_id | count |
+-----------+-------+
| 1 | 1 |
| 2 | 1 |
+-----------+-------+
まず、単純なSQL識別子に不要で非標準の引用符を使用しないでください。
CREATE TABLE client_notes (
id bigint(20) NOT NULL,
client_id int(11) NOT NULL,
user_id int(11) NOT NULL,
note text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
datepost datetime NOT NULL
) ENGINE=MyISAM
「最初の」ものを取得することは、順序と最小値を意味します。クライアントごとに最小の日付が必要です。
-- Note: example data column names don't match above table definition
select min(datepost) as datepost, client_id from ENGINE group by client_id
SELECTの結果はそれ自体がテーブルであり、操作することができます。
select broker_id, count(*) as 'count'
from ENGINE as E
join (
select min(datepost) as datepost, client_id from ENGINE group by client_id
) as A
on E.client_id = A.client_id
and E.datepost = A.datepost
group by broker_id
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加