2

我有“用户”表,其中包含字段
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 的帮助下获取用户的相应名称。

有人可以帮助我找到最佳解决方案。

4

2 回答 2

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
于 2013-01-29T07:14:35.733 回答
0

记住不要使用 UNION,但 UNION ALL 因为 UNION 只会返回将相似的行合并为一个,这可能会导致问题

于 2013-08-19T03:47:45.920 回答