簡體   English   中英

如何從mysql中的登錄日期/注銷日期表獲取組成員時間演變

[英]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.

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