行可以說我有這看起來一個用戶表像Mysql的計數在一段時間
userID int(4) unsigned not null auto_increment,
name varchar(50) not null,
date_start int(10) unsigned not null,
date_stop int(10) unsigned not null
我想數着活躍的所有用戶(DATE_START和date_stop之間,這些都是unix_timestamps()),每月。
所以結果應該是這樣的:
2012/01 55
2012/02 58
2012/03 51
我會說這樣的事情,但顯然我失去了一些東西:
SELECT
DATE_FORMAT(???, '%Y/%m'),
COUNT(userID)
FROM users
WHERE
??? BETWEEN date_start AND date_stop
GROUP BY DATE_FORMAT(???, '%Y%m');
...只是爲了澄清,對我有效的是:
SELECT m.yearMonth, COUNT(u.userID)
FROM users u
LEFT JOIN months m ON m.yearMonth BETWEEN DATE_FORMAT(FROM_UNIXTIME(u.date_start), '%Y%m') AND DATE_FORMAT(FROM_UNIXTIME(u.date_stop), '%Y%m')
GROUP BY m.yearMonth;
使用具有「所有」年/月存儲在YYYYMM。
我的第一個猜測是,這是正確的解決我的問題。去工作,我會盡快回復。 – b00st
這一個做的工作,包括月表,雖然語法在MySQL不同。我做了一個LEFT JOIN,因爲我只想要至少有一個用戶處於活動狀態的結果。我想出了這個: SELECT m.yearMonth,COUNT(u.userID)FROM users u LEFT JOIN months m ON m.yearMonth BETWEEN DATE_FORMAT(FROM_UNIXTIME(u.date_start),'%Y%m')AND DATE_FORMAT( FROM_UNIXTIME(u.date_stop), '%Y%M')GROUP BY m.yearMonth; – b00st