2016-10-03 24 views
1

我的統計查詢存在特殊問題。我想獲取連接到服務器的每個客戶端的最近用戶名,持續時間和連接數。這是查詢:MySQL Query未顯示最近的用戶名

SELECT name, SUM(duration) AS time, COUNT(auth) AS connections 
FROM analytics 
WHERE duration IS NOT NULL 
GROUP BY auth 
ORDER BY time DESC; 

問題是他們查詢沒有顯示最近的用戶名。它將數據庫中客戶端的第一個入口(由auth標識),即使客戶端已經改變了他們的用戶名。

有沒有辦法在上面的查詢中獲取客戶端的最近用戶名,而不會減慢很多?

示例表:

| id | auth | name | duration | 
|----|------|------|----------| 
| 1 | u123 | Fire | 50 | 
| 2 | u555 | Dan | 20 | 
| 3 | u123 | Ice | 30 | 

我能得到什麼:

| name | time | connections | 
|------|----------|-------------| 
| Fire | 80 |  2  | 
| Dan | 20 |  1  | 

我想

| name | time | connections | 
|------|----------|-------------| 
| Ice | 80 |  2  | 
| Dan | 20 |  1  | 
+1

提供樣本數據和預期結果將有所幫助... – sgeddes

+0

您是否有參數可以告訴您哪個用戶名是最新的?沒有這個,我不認爲這是可能的。 – happyHelper

+0

添加了示例數據,不,我沒有參數。 – Hannes

回答

0

我假設你想要最近的身份驗證命令的ID因爲沒有其他數據來獲取它。

SELECT A.name, B.time, B.connections 
FROM analytics AS A 
INNER JOIN 
(
SELECT auth, MAX(ID) AS MAXID, SUM(duration) AS time, COUNT(auth) as connections 
FROM analytics B 
WHERE duration IS NOT NULL 
GROUP BY auth 
) AS B 
ON A.auth = B.auth AND A.ID = B.MAXID 
0

如果你有一TimeStamp列爲最近註冊的用戶。 可以使用max()

select * from database where registered like (select max(registered) from database; 

我希望這將有助於得到它。只是分析這個想法。

+0

性能差,我不確定它是否會提供所需的結果。 – Sid