簡體   English   中英

基於TIMESTAMP的MySQL分組月份

[英]MySQL grouping months based on TIMESTAMP

我有一個名為user_logins的表,該表可跟蹤用戶登錄系統的情況。 它具有三列,login_id,user_id和login_time

login_id(INT) | user_id(INT) | login_time(TIMESTAMP)
------------------------------------------------------
  1       |      4       |   2010-6-14 08:54:36
  1       |      9       |   2010-7-16 08:56:36
  1       |      9       |   2010-8-16 08:59:19
  1       |      9       |   2010-8-16 09:00:24
  1       |      1       |   2010-8-16 09:01:24

我正在尋找一個查詢,該查詢將確定每天的唯一登錄次數,並確定每個月的唯一登錄次數。 如果一天中用戶已登錄兩次,則只會被計算一次。 示例輸出如下

month(VARCHAR) | logins(INT)
---------------------------
 June       |     1
 July       |     1
 August     |     2

在結果表August中只有2個,因為user_id 9在一天之內兩次登錄,而他在系統中登錄的那一天僅算作1次登錄。

在堆棧溢出的幫助下,我編寫了一個查詢來實現此目的,但是由於某種原因,當我嘗試使用休眠方式讀取Java中的值時,僅將DATE_FORMAT函數與'%M'一起使用時,會導致該對象被損壞,無法識別為字符串。 我認為這可能是因為我的查詢做錯了什么。 我的查詢如下:

 SELECT login_date, SUM(logins) as numLogins FROM (
    SELECT
      DATE_FORMAT(DATE(login_time), '%M') AS login_date,
      COUNT(DISTINCT login_id) AS logins
    FROM user_logins
    WHERE login_time > DATE_SUB(NOW() - INTERVAL 1 YEAR)
    GROUP BY DATE(login_time)) 
 AS Z GROUP BY(login_date)";

為什么不使用extract(login_time中的month)來獲取月份作為數值呢?

SELECT extract(month from login_time),
       COUNT(DISTINCT login_id) AS logins
FROM user_logins
WHERE login_time > DATE_SUB(NOW() - INTERVAL 1 YEAR)
GROUP BY extract(month from login_time)

暫無
暫無

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

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