0

我是编程初学者,尤其是 SQL。我正在使用 AOLDATA 数据库上的 SQLDeveloper。我正在处理的表的结构如下所示: AOLDATA.querydata

我不知道如何编写一个语句来提供拆分为不同部分的时间戳。我想知道在整个时间间隔(01.03.2006-28.05.2006)中搜索一个词的频率。我解决问题的方法是:

SELECT COUNT (id)
FROM AOLDATA.querydata
WHERE querytime between ('01.03.2006 00:00:00') 
AND ('01.03.2006 00:59:00')
AND QUERY LIKE '%burgerking%';

但是当我这样做时,我必须启动超过 2000 个请求来覆盖整个时间范围。因此,最好的输出是这样的格式。

词条:汉堡王

  • 星期一(00:00-00:59 (40 个结果),…,23:00-23:59(13 个结果))
  • …</li>
  • …</li>
  • …</li>
  • …</li>
  • …</li>
  • 星期日(00:00-00:59 (40 个结果),…,23:00-23:59(13 个结果))

有什么好的解决方案,比如循环或其他简单的方法吗?

4

1 回答 1

0

尝试:

SELECT *
FROM (
      select to_char( querytime, 'Day' ) my_day,
             to_char( querytime, 'D' ) my_day_of_week,
             to_char( querytime, 'hh24') my_hour, 
             id
      from querydata q
)  
pivot  (
  count(id) for (my_hour) in (
     '00' as "00:00-00:59",
     '01' as "01:00-01:59",
     '02' as "02:00-02:59",
     '03' as "03:00-03:59",
     '04' as "04:00-04:59",
     '05' as "05:00-05:59",
     '06' as "06:00-06:59",
     '07' as "07:00-07:59",
     '08' as "08:00-08:59",
     '09' as "07:00-09:59",
     '10' as "10:00-10:59",
     '11' as "11:00-11:59",
     '12' as "12:00-12:59",
     '13' as "13:00-13:59",
     '14' as "14:00-14:59",
     '15' as "15:00-15:59",
     '16' as "16:00-16:59",
     '17' as "17:00-17:59",
     '18' as "18:00-18:59",
     '19' as "19:00-19:59",
     '20' as "20:00-20:59",
     '21' as "21:00-21:59",
     '22' as "22:00-22:59",
     '23' as "23:00-23:59"
  )
)
ORDER BY my_day_of_week
于 2016-11-21T21:25:19.823 回答