我是编程的初学者,特别是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
有什么好的解决方案,比如循环或其他简单方法吗?
答案 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