我正在使用 MySQL 并有一个user_data
这样的表:
user_id int(10) unsigned
reg_date int(10) unsigned
carrier char(1)
reg_data 是注册时间的 unix 时间戳(可以是一天中的任何一秒),运营商是运营商的类型,其可能值只能是“D”、“A”或“V”。
我需要编写一个sql语句来选择从2013/01/01到2013/01/31的每一天不同运营商的注册用户数。所以理想的结果可能是:
2013/01/01 D 10
2013/01/01 A 31
2013/01/01 V 24
2013/01/02 D 9
2013/01/02 A 23
2013/01/02 V 14
....
2013/01/31 D 11
2013/01/31 A 34
2013/01/31 V 22
谁能帮我解决这个问题?我需要给出最好的答案,这意味着我可以在必要时添加索引,但我需要保持查询的效率。
目前,我在 (reg_date,carrier) 上创建了一个索引并使用以下查询:
select FROM_UNIXTIME(reg_date, "%M %D %Y") as reg_day, carrier, count(carrier) as user_count
from user_data
where reg_date >= UNIX_TIMESTAMP('2013-01-01 00:00:00') and reg_date < UNIX_TIMESTAMP('2013-02-01 00:00:00')
group by reg_day, carrier
order by reg_date;
谢谢!