MySQL 是一款非常流行的關系型數據庫管理系統,它被廣泛應用于 Web 開發、數據分析、數據存儲等領域。在 MySQL 中,我們常常需要計算連續登陸天數的功能,本文將介紹如何使用 SQL 語句實現這一功能。
CREATE TABLE user_login (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
login_date DATE NOT NULL
);
INSERT INTO user_login (user_id, login_date) VALUES
(1, '2021-01-01'),
(1, '2021-01-02'),
(1, '2021-01-03'),
(1, '2021-01-05'),
(1, '2021-01-06'),
(2, '2021-01-01'),
(2, '2021-01-02'),
(2, '2021-01-03');
我們首先創建了一個名為user_login
的表,它包含id
、user_id
和login_date
三個字段。接著,我們向表中添加了一些示例數據,這些數據表示兩個用戶在不同日期登陸的情況。
SELECT user_id,
COUNT(*) AS cons_login_day
FROM (
SELECT user_id,
login_date,
login_date - INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY AS group_id
FROM user_login
) AS t
GROUP BY user_id, group_id;
上述 SQL 語句使用了 MySQL 中的窗口函數和日期運算,它的執行過程如下:
- 使用
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date)
計算每個用戶的登陸日期在表中的排名。 - 對于每個用戶和每個排名,使用
login_date - INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY
計算一個日期分組標識。 - 將第 2 步計算的日期分組標識作為臨時表
t
中的一列。 - 對于臨時表
t
,按照user_id
和group_id
進行分組,使用COUNT(*)
函數計算每個分組中記錄的數量(即連續登陸天數)。
執行上述 SQL 語句,我們得到了如下結果:
+---------+----------------+
| user_id | cons_login_day |
+---------+----------------+
| 1 | 3 |
| 1 | 2 |
| 1 | 1 |
| 2 | 3 |
+---------+----------------+
上述結果表示第一個用戶連續登陸了 3 天、2 天和 1 天,第二個用戶連續登陸了 3 天。
通過上述 SQL 語句,我們成功計算了連續登陸天數,這對于需要統計用戶活躍度、進行數據分析等場景非常有用。
上一篇Css蘋果加載
下一篇mysql 連續幾天