我有“用户”表格,其中包含字段
user_name,user_id
我有像
这样的数据表data_table_2012_10
data_table_2012_11
data_table_2012_12
data_table_2013_01
data_table_2013_02
每个表包含以下字段
user_id, type ('ALARM', 'EMERGENCY', 'ALIVE', 'DEAD'), date_time
每张表中都会有数百万条记录。
我必须在用户给出的时间范围内从data_tables中选择类型的计数,并且必须在user_id的帮助下获得用户的相应名称。
有人可以用最好的解决方案帮助我。
答案 0 :(得分:1)
尝试此查询,其中DATE1和DATE2是您的日期范围。您应该联合内部查询中的所有表。您还可以尝试动态创建查询,以便仅在内部查询中包含您使用的日期范围内的表:
select t.user_id,t.type, MAX(users.user_name), SUM(t.cnt)
from
(
select user_id,type,count(*) cnt
from data_table_2012_10 where date_time between DATE1 and DATE2
group by user_id,type
union all
select user_id,type,count(*) cnt
from data_table_2012_11 where date_time between DATE1 and DATE2
group by user_id,type
union all
.........................................
union all
select user_id,type,count(*) cnt
from data_table_2013_02 where date_time between DATE1 and DATE2
group by user_id,type
) t
left join users on (t.user_id=users.user_id)
group by t.user_id,t.type
答案 1 :(得分:0)
请记住不要使用UNION,但UNION ALL作为UNION将只返回合并相似的行,这可能会导致问题