날짜 범위에서 일련의 행을 제공하는 Oracle Apex 함수가 있습니다. 시퀀스에서 선택한 항목은 TURNUS라는 식별자에서 발생합니다.턴어스가 1 인 쿼리에서 모든 행 반환
날짜 범위 : 7
반환은 다음과 같습니다 :
01 11 월 - 2016
07 11 월 - 2016
14 - 01 11 월 2016 11 월 2016 30
TURNUS가에 examle 들어 11월-2016
(21) 11 월 - 2016
29 11 월 - 2016
내가 1 TURNUS을 변경하는 경우, 나는의 반환받을 :
01 11 월 - 2016
내가보고 싶은 것은 :
01 11 월 - 2016
02 11 월 - 2016
...
30 11 월 - 2016 I 쿼리를 사용하고
결과를 수신하기 내 프런트 엔드 Oracle APEX 응용 프로그램에서 내 데이터베이스에서 만든보기에서 데이터를 선택합니다.
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
: 프론트 엔드에서
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
/
검색어 : 내가보기를 만들어이 후
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
)
:
이데이터베이스 테이블은 다음과 같습니다
의 콘텐츠의 테이블 시작하자
TURNUS = '1'을 제외하고 결과가 올바르게 표시됩니다. 그냥 한 행을 반환합니다. 현재 TURNUS가 '1'일 때 날짜 범위에서 단일 행을 반환하는 시퀀스를 얻으려는 아이디어가 부족합니다.
몇 가지 CASE 문을 생각하고 시도했지만 성공하지 못했습니다.
대단히 감사합니다.
'ROWNUM = 2-1'있는 것은 당신에게 하나 개의 행을주는'ROWNUM = 1 '과 동일합니다 ...나는 당신이'row_number()를 원한다고 생각한다. – JohnHC
예제 데이터와 원하는 결과를 보여줘라. 스크립트는 읽기가 어렵다. 왜 집계 함수없이 group by를 사용 하는가? Turnus의 가치는 무엇입니까? rownum과 원하는 결과는 무엇입니까? 퍼즐에 많은 누락 된 부분이 있습니다. –
나는 진짜 코드를 게시했는지 의심 스럽습니다. 처음에는 당신의 견해가 'VIEW'라고하지 않을 것입니다. 또한'VIEW'를 두 번 사용했습니다. 한 번만 'VIEW'에서 선택하는 쿼리에서 한 번, 'VIEW'자체에서 한 번 선택했습니다. 따라서 실제 * 코드를 게시하고 현명한 방법으로 형식을 지정하십시오. –