I need a SINGLE query that does this sequence in oracle.
select count(*) from table1
where request_time < timestamp'2012-05-19 12:00:00' and (end_time > timestamp'2012-05-19 12:00:00' or end_time=null);
select count(*) from table1
where request_time < timestamp'2012-05-19 13:00:00' and (end_time > timestamp'2012-05-19 13:00:00' or end_time=null);
select count(*) from table1
where request_time < timestamp'2012-05-19 14:00:00' and (end_time > timestamp'2012-05-19 14:00:00' or end_time=null);
select count(*) table1
where request_time < timestamp'2012-05-19 15:00:00' and (end_time > timestamp'2012-05-19 15:00:00' or end_time=null);
select count(*) from table1
where request_time < timestamp'2012-05-19 16:00:00' and (end_time > timestamp'2012-05-19 16:00:00' or end_time=null);
As you see the hour is increasing one by one. here is the output
COUNT(*)
1085
COUNT(*)
1233
COUNT(*)
1407
COUNT(*)
1322
COUNT(*)
1237
I have written a query but it does not give me the right answer!
select col1, count(*) from
(select TO_CHAR(request_time, 'YYYY-MM-DD HH24') as col1 from table1
where request_time <= timestamp'2012-05-19 12:00:00' and (end_time >= timestamp'2012-05-19 12:00:00' or end_time=null))
group by col1 order by col1;
this query gives me a result set that sum of it's count(*) is equal to the first query written above! here is the result:
COL1 COUNT(*)
------------- ----------------------
2012-05-19 07 22
2012-05-19 08 141
2012-05-19 09 322
2012-05-19 10 318
2012-05-19 11 282
Note the usage of
trunc
expression with date values. You can omit thealter session
if you are not running the query in sql*plus.Your individual queries seem to be matching overlapping sets of records. It would help if you included some sample data in your question, but I can guess...
For example, all the records which have an end_time=null and a request_time=2012-05-19 13:30:00 will be counted by both the first and second queries; but they will only be counted once in your "overall" query.
Maybe you meant to query on a date range on request_time, instead of having an open-ended predicate like
request_time < timestamp'2012-05-19 12:00:00'
?Try this
For Oracle database its working as expected.
SELECT to_char(updated,'DD-MM-YYYY HH'), count(*) FROM customer WHERE trunc(updated) >= to_Char('02-JUL-2017') And trunc(updated) <= to_Char('02-JUL-2017') group by to_char(updated,'DD-MM-YYYY HH')