次のようなユーザーテーブルがあるとしましょう
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 の形式で格納されているテーブルを使用します。