I have a Oracle Apex function which is giving a sequence of rows in a date range. The items picked in the sequence are soming from a Identifier called TURNUS. For examle:
Date Range: 01-NOV-2016 to 30-NOV-2016
TURNUS is: 7
Return is:
01-NOV-2016
07-NOV-2016
14-NOV-2016
21-NOV-2016
29-NOV-2016
If I change TURNUS to 1, I get a return of:
01-NOV-2016
What I want to see is:
01-NOV-2016
02-NOV-2016
...
30-NOV-2016
To receive the result I am using a query in my Frontend of the Oracle APEX App which is picking data from a view I created in my database.
Let's start with the table of content:
The Database table is:
CREATE TABLE "GROUPS"
( "PK_ID" NUMBER,
"NAME_OF_GROUP" VARCHAR2(120),
"SEATS" NUMBER,
"DATE_FROM" DATE,
"TURNUS" VARCHAR2(120),
"CREATE_DATE" DATE,
"CREATED_BY" VARCHAR2(120),
"FK_PUBLIC_FUNDING_BODY" NUMBER,
"VALID_TILL" DATE,
"DELETE_FLAG" NUMBER,
"DESCRIPTION" VARCHAR2(300),
"DATETIME_FROM" TIMESTAMP (6),
"DATETIME_TILL" TIMESTAMP (6),
"TIMEFROM" TIMESTAMP (6),
"TIMETILL" TIMESTAMP (6),
"DURATION" NUMBER,
"FK_ROOM_ID" NUMBER,
"DELETE_DATE" DATE,
"GROUP_DELETE_REASON" VARCHAR2(255),
CONSTRAINT "GROUPS_PK" PRIMARY KEY ("PK_ID")
USING INDEX ENABLE
)
After this I created a view:
CREATE OR REPLACE FORCE VIEW "VIEW_GROUP_DATERANGE" (
"DAY", "PK_ID", "TURNUS", "NAME_OF_GROUP",
"FK_PUBLIC_FUNDING_BODY", "TIME_FROM", "TIME_TILL",
"DATETIME_FROM", "DATETIME_TILL", "D_FROM", "D_TO") AS
with
T_from_to as (
select
trunc(DATETIME_FROM) as d_from,
trunc(DATETIME_TILL) as d_to,
DATETIME_FROM as DATETIME_FROM,
DATETIME_TILL as DATETIME_TILL,
PK_ID,
TURNUS,
NAME_OF_GROUP,
FK_PUBLIC_FUNDING_BODY
FROM GROUPS
),
T_seq as (
select level-1 as delta
from dual
connect by level-1 <= (select max(d_to-d_from) from T_from_to)
)
select d_from + delta as DAY, PK_ID, TURNUS, NAME_OF_GROUP,
FK_PUBLIC_FUNDING_BODY, TO_CHAR(DATETIME_FROM,'HH.MI') as TIME_FROM,
TO_CHAR(DATETIME_TILL,'HH.MI') as TIME_TILL, DATETIME_FROM, DATETIME_TILL,
d_from, d_to
from T_from_to, T_seq
where d_from + delta <= d_to
order by day
/
Query in Frontend:
SELECT rownum, ID, DAY, d_from, d_to, TURNUS,
NAME_OF_GROUP
FROM VIEW_GROUP_DATERANGE
WHERE ID= 1 (Variable ID of the Group)
GROUP BY rownum, ID, DAY, d_from, d_to, TURNUS, NAME_OF_GROUP
HAVING MOD(rownum,TURNUS) = 0 OR rownum = 2-1
ORDER BY rownum
The result is showing correctly except of TURNUS = '1'. It just returns one row. I'm currently running out of ideas to get a sequence which returns any single row in a date range when TURNUS is '1'.
I thought and tried some CASE statements but didn't succeed.
Thank you very much in advance.