日付範囲内に一連の行を与えるOracle Apex関数があります。シーケンスで選択された項目は、TURNUSという識別子から起きています。ターン数が1であるクエリからすべての行が返される
日付範囲:examleについて01 - 11月 - 2016年30 - 11月 - 2016年に
トゥルヌスは次のとおりです。7
戻りは以下のとおりです。
01 - 11月 - 2016
07 - 11月 - 2016
14- 11月 - 2016
21 - 11月 - 2016
29 - 11月 - 2016
私は1にトゥルヌスを変更すると、私はのリターンを得る:
01 - 11月 - 2016
私は何を見たいのです:
01 - 11月 - 2016
02 - 11月 - 2016
...
30 - 11月 - 2016
私は、クエリを使用していた結果を受信するには私のデータベースで作成したビューからデータをピッキングしているOracle APEX Appのフロントエンドにあります。
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'以外の結果が正しく表示されています。 1行だけを返します。私は現在、TURNUSが '1'である場合、日付範囲内の任意の単一の行を返すシーケンスを取得するためのアイディアが不足しています。
私はいくつかのCASE文を考えて試しましたが、成功しませんでした。
は事前にありがとうございました。
'持つROWNUM = 2-1'はあなたに1つの行を与え、' ROWNUM = 1 'と同じです...私はあなたが 'row_number()'をしたいと思う – JohnHC
いくつかのサンプルデータと望みの結果を表示してください - あなたのスクリプトは読みにくいです - どうして集計関数なしでgroup byを使用しますか? Turnusの値は何ですか? rownumの望みの結果は何ですか?あなたのパズルに欠けているものがたくさんある... –
私は真剣にあなたのコードを投稿したことに真剣に疑念を抱いています。また、 'VIEW'を二度使用しました。おそらく' VIEW'から選択したクエリと 'VIEW'自体の定義の中で一度選択します。ですから、*実際の*コードを投稿し、それを賢明な方法でフォーマットしようとしてください。 –