簡體   English   中英

MySQL選擇多個最新值

[英]MySQL Select Multiple latest Values

我有一個包含用戶統計信息的表,只需要為每個用戶選擇最新值:

我使用php時間戳輸入日期/ lastlogin。

stat_id:自動遞增

stat_user:登錄的用戶

stat_count:他登錄的次數

stat_lastlogin:他上次登錄

表格:user_stats

stat_id       | stat_user   | stat_count | stat_lastlogin
---------------------------------------------------------
1             | Admin       |      1     | 1386661327
2             | User        |      1     | 1386661340
3             | Guest       |      1     | 1386661358
4             | Admin       |      2     | 1386662383
5             | Guest       |      2     | 1386663794
6             | Admin       |      3     | 1386663806
7             | Super       |      1     | 1386663812

所以我想要實現的是顯示輸出時的以下內容:

stat_id       | stat_user   | stat_count | stat_lastlogin
---------------------------------------------------------
2             | User        |      1     | 1386661340
5             | Guest       |      2     | 1386663794
6             | Admin       |      3     | 1386663806
7             | Super       |      1     | 1386663812

可以有無限數量的用戶。

最終,我希望統計數據顯示每年的每月登錄數。

利用MySQL非標准GROUP BY擴展,您可以執行

SELECT stat_id, stat_user, stat_count, stat_lastlogin
  FROM 
(
  SELECT stat_id, stat_user, stat_count, stat_lastlogin 
    FROM table1
   ORDER BY stat_lastlogin DESC
) q
 GROUP BY stat_user

或以更標准的方式

SELECT t.stat_id, t.stat_user, t.stat_count, t.stat_lastlogin
  FROM 
(
  SELECT stat_user, MAX(stat_lastlogin) stat_lastlogin
    FROM table1
   GROUP BY stat_user
) q JOIN table1 t
    ON q.stat_user = t.stat_user
   AND q.stat_lastlogin = t.stat_lastlogin
 ORDER BY stat_user

或者,如果stat_lastlogin未更新(​​意味着stat_id越高,則最近的記錄越多)

SELECT t.stat_id, t.stat_user, t.stat_count, t.stat_lastlogin
  FROM 
(
  SELECT MAX(stat_id) stat_id
    FROM table1
   GROUP BY stat_user
) q JOIN table1 t
    ON q.stat_id = t.stat_id
 ORDER BY stat_user

輸出:

| STAT_ID | STAT_USER | STAT_COUNT | STAT_LASTLOGIN |
|---------|-----------|------------|----------------|
|       6 |     Admin |          3 |     1386663806 |
|       5 |     Guest |          2 |     1386663794 |
|       7 |     Super |          1 |     1386663812 |
|       2 |      User |          1 |     1386661340 |

這是所有查詢的SQLFiddle演示

你可以試試這個嗎?

SELECT user_stat.*
FROM user_stat INNER JOIN
(
    SELECT stat_user, MAX(stat_lastlogin) as ll
    FROM user_stats
    GROUP BY stat_user
) x ON user_stat.stat_user = x.stat_user AND user_stat.stat_lastlogin = x.ll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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