Mysql
如何用開始時間和結束時間計算每天的不同值
我的標題可能看起來有點混亂,但這裡是上下文。
我有一個表 1。它包含每個到 SSID 的連接的參考程式碼以及開始時間的值。現在我有一個場景,使用者今天連接並在 2 天后斷開連接。因此,在表中它只有 1 條記錄,其中包含今天的開始時間和包含今天之後 2 天的結束時間。
現在我想提取每天的使用者連接報告。在這種情況下,當我每天按參考程式碼分組時,它只會算作 1 3 天。但我希望它被算作每天 1 個。有什麼方法可以做到這一點?
@MrBrownstone 該查詢的結果將是
username starttime count(*) 445425760933 2019-02-05 1 445425760934 2019-02-05 1 445425760934 2019-02-06 1
這不是我要尋找的結果。以下是我需要的結果:
username starttime count(*) 445425760933 2019-02-05 1 445425760933 2019-02-06 1 445425760933 2019-02-07 1 445425760934 2019-02-05 1 445425760934 2019-02-06 1
由於使用程式碼 445425760933 直到 2019-02-07
對於 MySQL 8+:
WITH RECURSIVE dates AS ( SELECT MIN(DATE(starttime)) `date` FROM table1 UNION ALL SELECT `date` + INTERVAL 1 DAY FROM dates WHERE `date` < ( SELECT MAX(DATE(endtime)) FROM table1 ) ), users AS ( SELECT DISTINCT username FROM table1 ) SELECT /* DISTINCT */ users.username, dates.`date`, 1 `count(*)` FROM users JOIN dates JOIN table1 ON table1.username = users.username AND dates.`date` BETWEEN DATE(table1.starttime) AND DATE(table1.endtime)
如果我正確理解您的需求,您可以使用該
DATE
功能僅按日期分組並忽略時間:SELECT username, DATE(starttime) AS start_date, COUNT(*) as `count` FROM my_table GROUP BY username, DATE(starttime) ORDER BY username, DATE(starttime);
您可以在下面找到有關日期和時間函式的更多資訊:
編輯
根據提供的其他資訊,您將需要一個僅包含日期的輔助表,以實現您想要做的事情:
CREATE TABLE `dates` ( `Date` DATE NOT NULL PRIMARY KEY ); SELECT DISTINCT username, `Date`, COUNT(*) as `count` FROM my_table AS t JOIN dates AS d ON d.`Date` BETWEEN DATE(t.startime) AND DATE(t.endtime) GROUP BY username, `Date` ORDER BY username, `Date`;