[英]How to obtain a group membership time evolution from login date / logout date table in mysql
mysql 的新手:我有一個成員表,其中包含名稱、登錄日期和注銷日期列。
姓名 | 登錄日期 | 注銷日期 |
---|---|---|
約翰 | 2004-01-08 00:00:00 | 2004-01-10 00:00:00 |
瑪麗 | 2004-01-09 00:00:00 | 2005-05-31 00:00:00 |
坦率 | 2004-01-12 00:00:00 | 2005-11-08 00:00:00 |
南希 | 2004-01-12 00:00:00 | 2007-10-13 00:00:00 |
路易絲 | 2004-01-16 00:00:00 | 2011-09-30 00:00:00 |
我想知道一段時間內成員資格的演變,因此使用 2 個日期(first_date 和 last_date)作為限制,以獲取范圍內每天組中的成員數量(first_date,last_date)
mysql可以嗎? 任何線索將不勝感激
干杯。
以下查詢獲取特定日期 (@mydate) 的成員數量
SELECT count(*) FROM members WHERE login_date <= @mydate and logout_date>= @mydate
給定 2 個日期,我想要這樣的東西:@myfirstdate = '2004-01-08 00:00:00' @mylastdate = '2004-01-16 00:00:00'
日期 | 會員# |
---|---|
2004-01-08 00:00:00 | 1個 |
2004-01-09 00:00:00 | 2個 |
2004-01-10 00:00:00 | 2個 |
2004-01-11 00:00:00 | 1個 |
2004-01-12 00:00:00 | 3個 |
2004-01-13 00:00:00 | 3個 |
2004-01-14 00:00:00 | 3個 |
2004-01-15 00:00:00 | 3個 |
2004-01-16 00:00:00 | 4個 |
但如果可能的話,我不知道如何在 mysql 中做到這一點。
您可以使用WITH RECURSIVE
生成兩個日期之間的天數:
WITH RECURSIVE days AS (
SELECT '2004-01-08' AS login_date
UNION ALL
SELECT DATE_ADD(login_date, INTERVAL 1 DAY) AS value
FROM days
WHERE days.login_date < '2004-01-16'
)
SELECT *
FROM days;
然后使用inner join
將它與您的表連接起來。
這是查詢:
WITH RECURSIVE days AS (
SELECT '2004-01-08' AS login_date
UNION ALL
SELECT DATE_ADD(login_date , INTERVAL 1 DAY) AS login_date
FROM days
WHERE days.login_date < '2004-01-16'
)
SELECT d.login_date, count(1)
FROM days d
inner join member_name mn on d.login_date between mn.login_date and mn.logout_date
group by d.login_date;
我選擇為使用 mariadb 的任何人創建其他查詢。
我們可以使用 seq_8_to_16 來生成我們想要的日期,
這個select seq from seq_8_to_16;
將生成從 8 到 16 的數字。例如,要生成從 1 到 100 的整數序列,請執行以下操作:
select seq from seq_1_to_100;
所以我們的查詢將如下所示:
select d.login_date, count(1)
from member_name mn
inner join (
SELECT concat('2004-01-', if(seq<10, concat('0',seq) ,seq)) as login_date
FROM seq_8_to_16 d
) as d on d.login_date between mn.login_date and mn.logout_date
group by d.login_date;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.