[英]MySQL 3 table join with count from one table and max timestamp from another
我有3個表格,樣本數據如下。 我正在嘗試獲取有關代理名稱,該代理的客戶端數量以及該代理上次登錄的時間的報告。如果該代理沒有客戶端,他將沒有任何記錄(但可以進行最后一次登錄)日期)。 相反,代理有可能擁有客戶,但從未登錄過。
table agents
| id | first | last |
----------------------------------------
| 1 | dave | schultz |
| 2 | bobby | clarke |
| 3 | ed | hospidar |
| 4 | derek | smith |
table agentclients
| id | agentid | clientid |
----------------------------------------
| 1 | 2 | 345 |
| 2 | 3 | 347 |
| 3 | 3 | 221 |
| 4 | 1 | 567 |
table loginhistory
| id | userid | usertype | ts
-------------------------------------------------------
| 1 | 2 | A | 2018-11-17 14:16:44 |
| 2 | 3 | A | 2018-11-24 20:46:16 |
| 3 | 4 | A | 2018-11-27 13:07:58 |
| 4 | 1 | A | 2019-01-05 13:45:01 |
| 5 | 4 | A | 2019-01-19 06:36:23 |
| 6 | 3 | A | 2019-01-24 02:13:44 |
Results:
agent id | agent name | clients | last login
-------------------------------------------------------
1 | dave schultz | 1 | 2019-01-05 13:45:01
2 | bobby clark | 1 | 2018-11-17 14:16:44
3 | ed hospidar | 2 | 2019-01-24 02:13:44
4 | derek smith | 0 | 2018-11-27 13:07:58
我似乎可以得到計數或最大登錄數,但是如果我嘗試全部加入3個,則計數不正確。
SELECT a.id, a.first, a.last, count(ac.clientid) as 'client count'
FROM agents a
LEFT JOIN agentclients ac on a.id = ac.agentid
WHERE a.agentdeleted = 0
GROUP BY ac.agentid;
用於計數客戶
如果我嘗試添加max(),計數將中斷:
SELECT a.id, a.first, a.last, count(ac.clientid) as 'client count',
max(l.ts) AS 'lastlogin'
FROM agents a
LEFT JOIN agentclients ac on a.id = ac.agentid
LEFT JOIN loginhistory l on l.userid = a.aid and l.usertype = 'A'
WHERE a.agentdeleted = 0
GROUP BY ac.agentid;
您應該在agentclients
表中計算代理的唯一記錄數量。 您可以通過agentclients.id
列在agentclients.id
幫助下DISCTINCT
agentclients.id
SELECT a.id,
a.first,
a.last,
COUNT( DISTINCT ac.id) as 'client count',
max(l.ts) AS 'lastlogin'
FROM agents a
LEFT JOIN agentclients ac on a.id = ac.agentid
LEFT JOIN loginhistory l on l.userid = a.aid and l.usertype = 'A'
WHERE a.agentdeleted = 0
GROUP BY ac.agentid;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.