将时间戳分为24小时,并获得一周的概述

时间:2016-11-21 20:11:35

标签: sql oracle aol oracledb

我是编程的初学者,特别是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个请求来覆盖整个时间帧。因此,最好的输出将是这样的格式。

术语:burgerking

  • 星期一(00:00-00:59(40结果),...,23:00-23:59(13结果))
  • ...
  • ...
  • ...
  • ...
  • ...
  • 周日(00:00-00:59(40结果),...,23:00-23:59(13结果))

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

1 个答案:

答案 0 :(得分: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