5

现在,我有一个多选子查询,它根据一天中的小时数抓取数据。我现在要做的是在该查询中引入另一个表,并根据 id 以及原始表中的日期时间进行计数。

我现在拥有的是:

select
(
select     count(a_date)
from     t1
where     d_date
     between     '2013-01-07 00:00:00' and '2013-01-07 00:59:59'
) AS     '00:00 to 00:59',
(
select     count(a_date)
from     t1
where     d_date
     between     '2013-01-07 01:00:00' and '2013-01-07 01:59:59'
) AS     '01:00 to 01:59'

以此类推,直到一天结束。

我有另一个查询,它根据 id 和 datetime 给我计数,但只有两列,一列显示 c_name,另一列显示小时计数。

前任。

select  t2.c_name, count(t1.a_date)
from    t2 join t1
on t2.t1_key = t1.t2_key
where   t1.d_date
    between '2013-01-07 00:00:00' and '2013-01-07 00:59:59'
group by    t2.c_id

基本上,我想将这两个查询组合成一个可以显示 c_name 和一天中所有时间的查询。

有什么建议么?

4

1 回答 1

4

我会考虑使用该CASE语句。

尝试这样的事情(添加额外的 23 列):

select  c_name, 
   SUM(case when HOUR(d_date) = 0 then 1 else 0 end) '00:00 to 00:59',
   SUM(case when HOUR(d_date) = 1 then 1 else 0 end) '01:00 to 01:59'
from   t2
    join t1 on t2.t1_key = t1.t2_key 
group by c_name

这是SQL Fiddle

您只需要为 d_date 添加 WHERE 标准 - 例如:

where  d_date between '2013-01-07 00:00:00' and '2013-01-07 23:59:59'

或者

where  Date(d_date) = '2013-01-07'

祝你好运!

于 2013-01-28T20:20:54.220 回答