假设我有一个看起来像的用户表
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 形式存储“所有”年/月的表。