我需要在00:15:00和01:15:00之间获取PRODUCT_ID
的计数,并随后获取任何日期范围的计数。
示例脚本:-
我的DB结构和数据如下。
CREATE TABLE time1 (cr_date date , product_id number );
insert into time1 values (to_date ('01-JAN-2022 01:00:00', 'DD_MON-YYYY HH:MI:SS') , 12345);
insert into time1 values (to_date ('01-JAN-2022 01:00:00', 'DD_MON-YYYY HH:MI:SS') , 12346);
insert into time1 values (to_date ('01-JAN-2022 01:00:00', 'DD_MON-YYYY HH:MI:SS') , 12347);
insert into time1 values (to_date ('01-JAN-2022 03:30:00', 'DD_MON-YYYY HH:MI:SS') , 42345);
insert into time1 values (to_date ('01-JAN-2022 03:30:00', 'DD_MON-YYYY HH:MI:SS') , 42346);
insert into time1 values (to_date ('01-JAN-2022 03:35:00', 'DD_MON-YYYY HH:MI:SS') , 42347);
insert into time1 values (to_date ('01-JAN-2022 03:40:00', 'DD_MON-YYYY HH:MI:SS') , 42348);
insert into time1 values (to_date ('01-JAN-2022 10:40:00', 'DD_MON-YYYY HH:MI:SS') , 10348);
insert into time1 values (to_date ('01-JAN-2022 10:42:00', 'DD_MON-YYYY HH:MI:SS') , 10349);
insert into time1 values (to_date ('01-JAN-2022 10:43:00', 'DD_MON-YYYY HH:MI:SS') , 11348);
COMMIT;
输出要求如下:-
| hours | count |
|:------ |:------|
|00:15:00 |3|
|01:15:00 |0|
|02:15:00 |0|
|03:15:00 |0|
|04:15:00 |4|
|05:15:00 |0|
|06:15:00 |0|
|07:15:00 |0|
|08:15:00 |0|
|09:15:00 |0|
|10:15:00 |0|
|11:15:00 |3|
|..
|...
|23:15:00 |0|
2条答案
按热度按时间ccrfmcuu1#
你(最初)发布的样本数据几乎是无用的,没有时间成分。
在我的一个表中,有一个
datum
列,其值如下所示:这是一个
fmin
CTE creates 24 rows(00:15,01:15,...(23:15)datum
上完成的,“四舍五入”到前15分钟的值(无论是在同一小时内,还是在前一小时内-取决于分钟)所以:
结果:
watbbzwu2#
您不会得到基于时间的计数,因为您只在
CR_DATE
列中存储date
。即使您将
date
转换为timestamp
,时间也将始终设置为默认值,即00:00:00.000000
或12:00:00.000000
。为了实现这一点,你必须像下面这样重新创建你的表:
然后,您必须将实际的
timestamp
插入到表中,如下面的示例所示。这里是to_timestamp的文档。
在此之后,您可以根据您的问题根据时间进行查询。
TRUNC()
函数的Here is the documentation。从上述查询中可能得到以下结果。
如果您发现任何问题,请在下面评论以供进一步讨论。