簡體   English   中英

MySQL 3表聯接,其中一個表的計數和另一個表的最大時間戳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM