(57)【特許請求の範囲】
【請求項１】
コンピュータが、
値が順に入力される複数の項目の各々に対応する、所定の処理の対象となる項目の範囲の開始位置を示す第1のフラグ及び前記範囲の終了位置を示す第2のフラグの設定を行うことを許容し、
前記第１のフラグが設定されているN(Nは1以上の整数)番目から、前記第２のフラグが設定されているM(MはN以上の整数)番目までの範囲に入力された値を対象値とし、
前記N番目から前記M番目に設定された項目に値が入力されたことを検出すると、
前記対象値に対して前記所定の処理を実行し、
前記所定の処理の結果を出力する処理を前記N番目の項目から順に実行し、
前記第1のフラグはさらに、前記第1のフラグが設定された位置から開始される範囲の数を示し、
前記第2のフラグはさらに、前記第2のフラグが設定された位置で終了する範囲の数を示す、
ことを特徴とするデータ処理方法。
【請求項２】
前記第1のフラグまたは前記第2のフラグが設定された項目を順次入力し、
前記検出において、前記第1のフラグが設定された前記N番目の項目に、前記第1のフラグにより示される個数の、前記範囲の開始を示す開始点を設定し、前記N番目の項目以降に入力された項目であって、前記第2のフラグが設定された、前記個数の項目の各々に前記範囲の終了を示す終了点を設定し、
前記所定の処理の実行において、前記開始点が設定された項目に対応付けて入力された値〜前記終了点が設定された項目に対応付けて入力された値に対して前記所定の処理を実行する
ことを特徴とする請求項1に記載のデータ処理方法。
【請求項３】
前記第1のフラグは、前記範囲の数が無限であることを示す情報であり、
前記検出において、前記第1のフラグが設定された前記N番目の項目に、無限の前記開始点を設定し、前記N番目の項目以降に入力された項目であって、前記第2のフラグが設定された複数の項目の各々に前記終了点を設定する
ことを特徴とする請求項2に記載のデータ処理方法。
【請求項４】
前記許容において、前記項目について、前記終了点の設定の停止を示す第3のフラグの設定を行うことを許容し、
前記検出において、前記範囲の数が無限であることを示す情報である前記第1のフラグ が設定された項目の入力を検出した後、前記第3のフラグが設定された項目の入力を検出すると、前記第3のフラグが設定された項目以降に入力された項目に前記終了点を設定する処理を停止する
ことを特徴とする請求項2に記載のデータ処理方法。
【請求項５】
前記項目の入力において、入力した前記項目をメモリに記憶し、
前記所定の処理の実行において、前記所定の処理の結果を前記メモリに記憶し、前記メモリに記憶された前記項目を削除し、前記項目が入力される度に、前記メモリに記憶された前記所定の処理の結果と前記項目に対応づけて入力された値とに対して前記所定の処理を実行する
ことを特徴とする請求項4に記載のデータ処理方法。
【請求項６】
値が順に入力される複数の項目を記憶する記憶装置と、
前記複数の項目の値に対して所定の処理を実行する処理装置とを有し、
前記処理装置は、値が順に入力される複数の項目の各々に対応する、所定の処理の対象となる項目の範囲の開始位置を示す第1のフラグ及び前記範囲の終了位置を示す第2のフラグの設定を行うことを許容し、前記第１のフラグが設定されているN(Nは1以上の整数)番目から、前記第２のフラグが設定されているM(MはN以上の整数)番目までの範囲に入力された値を対象値とし、前記対象値に対して前記所定の処理を実行し、前記所定の処理の結果を出力する処理を前記N番目の項目から順に実行し、前記第1のフラグはさらに、前記第1のフラグが設定された位置から開始される範囲の数を示し、前記第2のフラグはさらに、前記第2のフラグが設定された位置で終了する範囲の数を示す、
ことを特徴とするデータ処理装置。
【請求項７】
コンピュータに、
値が順に入力される複数の項目の各々に対応する、所定の処理の対象となる項目の範囲の開始位置を示す第1のフラグ及び前記範囲の終了位置を示す第2のフラグの設定を行うことを許容し、
前記第１のフラグが設定されているN(Nは1以上の整数)番目から、前記第２のフラグが設定されているM(MはN以上の整数)番目までの範囲に入力された値を対象値とし、
前記N番目から前記M番目に設定された項目に値が入力されたことを検出すると、
前記対象値に対して前記所定の処理を実行し、
前記所定の処理の結果を出力する処理を前記N番目の項目から順に実行し、
前記第1のフラグはさらに、前記第1のフラグが設定された位置から開始される範囲の数を示し、
前記第2のフラグはさらに、前記第2のフラグが設定された位置で終了する範囲の数を示す、
処理を実行させることを特徴とするデータ処理プログラム。
【請求項８】
処理対象のデータと、前記処理対象の範囲を示す、第1のフラグ、第2のフラグの何れか1または全てを含む複数のレコードを順次入力し、
前記第1のフラグを含む第1のレコードの入力を検出し、前記第2のフラグを含む第2のレコードの入力を検出すると、
前記第1のレコードの処理対象のデータから前記第2のレコードの処理対象のデータまでに対して所定の処理を実行し、処理結果を出力し、
前記第1のフラグはさらに、前記第1のフラグが設定された位置から開始される範囲の数を示し、
前記第2のフラグはさらに、前記第2のフラグが設定された位置で終了する範囲の数を示す、
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理方法、データ処理装置、および、データ処理プログラムに関する。
【背景技術】
【０００２】
クエリ(query)に応じたデータ処理を、複数のレコードに実行する処理装置が提案されている。レコードは、複数の属性の各々に対応するデータを含む。
【０００３】
レコードは、例えばある店舗の売上げを含むレコードであり、かかる売上レコードは、第1の属性として月日、第2の属性としてこの月日の売上（売上金額や売上個数など）を含む。例えば、第1のレコードは、1月1日の売上"100"万円を有し、第2のレコードは、1月2日の売上"200"万円を含む。
【０００４】
クエリは、例えば、処理対象のレコードの範囲を特定するための特定情報や、データ処理の内容を示す処理情報を含む。かかる処理対象のレコードの範囲は、処理対象のデータ範囲とも呼ばれる。
【０００５】
処理装置は、レコードを入力し、メモリに記憶する。そして、処理装置は、メモリに記憶された複数のレコードの中から、入力されたクエリの特定情報に基づき、処理対象のレコードの範囲を特定する。そして、処理装置は、入力されたクエリの処理情報に基づき、特定したレコードのデータ(処理対象のデータ範囲)にデータ処理を実行する。処理装置は、例えばメモリの利用効率を向上させるため、データ処理の実行後、特定された範囲内のレコードをメモリから削除する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−３３１１０４号公報
【特許文献２】特開２００８−１７１２５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
処理装置の利用者は、新たなクエリの実行を処理装置に要求する場合がある。この新たなクエリは、メモリから削除された複数のレコードのデータに所定の処理を実行する要求を含むものとする。すなわち、処理対象のレコードのデータが、メモリから削除されたレコードのデータであるとする。処理装置は、新たなクエリの実行において、処理対象のデータ範囲を変更する。処理装置は、前記した新たなクエリの実行を行う場合、処理対象のレコードがメモリから削除されたので、メモリから削除されたレコードを再度入力する必要がある。
【０００８】
しかし、処理装置が、一度入力したレコードを再度入力すると、再入力するレコードを検索する処理や、検索したレコードを入力する処理などの様々な処理を実行する必要がある。そのため、処理負荷が増えたり、処理時間が長くなるなどの不利な点が生じる。かかる不利な点を考慮すれば、レコードを再度入力することは、現実的ではない。
【０００９】
以上説明したように、処理装置は、データ処理の実行後、新たなクエリが入力されると、処理対象のデータ範囲を変更して、このクエリを実行することが困難である。
【００１０】
本実施の形態の一つの側面は、データ処理の実行後であっても、処理対象のデータ範囲を変更して新たなクエリの実行を可能にすることを目的とする。
【課題を解決するための手段】
【００１１】
一つの側面は、対応する値が順に入力される複数の項目の各々について、第1のフラグの設定または第2のフラグの設定を行うことを許容し、前記第1のフラグがN(Nは1以上の整数)番目に設定された項目に対応づけた値が入力され、かつ、前記第2のフラグがM(MはN以上の整数)番目に設定された項目に対応づけた値が入力されたことを検出すると、前記第1のフラグがN番目に設定された項目に対応づけて入力された値〜前記第2のフラグがM番目に設定された項目に対応づけて入力された値までに対して所定の処理を実行し、処理結果を出力する処理をN番目の項目から順に実行する、ことを特徴とするデータ処理方法である。
【発明の効果】
【００１２】
一つの側面によれば、データ処理の実行後であっても、処理対象のデータ範囲を変更して新たなクエリの実行を可能にすることができる。
【図面の簡単な説明】
【００１３】
【図１】図1は、クエリと処理対象のデータ範囲とを説明する第1の図である。
【図２】図2は、クエリと処理対象のデータ範囲とを説明する第2の図である。
【図３】図3は、新たなクエリを実行できない場合を説明する図である。
【図４】図4は、本実施の形態のデータ処理装置DPAを有する情報処理システムSYSの構成図である。
【図５】図5は、図4のデータ処理装置DPAのハードウェアブロック図である。
【図６】図6は、図4のデータ処理装置DPAのソフトウェアブロック図である。
【図７】図7は、図4の加工装置MAのハードウェアブロック図である。
【図８】図8は、本実施の形態におけるデータ処理を説明する第1の図である。
【図９】図9は、本実施の形態におけるデータ処理を説明する第2の図である。
【図１０】図10は、本実施の形態におけるデータ処理を説明する第3の図である。
【図１１】図11は、本実施の形態におけるデータ処理を説明する第4の図である。
【図１２】図12は、本実施の形態におけるデータ処理を説明する第5の図である。
【図１３】図13は、本実施の形態におけるデータ処理を説明する第6の図である。
【図１４】図14は、本実施の形態におけるデータ処理を説明する第7の図である。
【図１５】図15は、本実施の形態におけるデータ処理を説明する第8の図である。
【図１６】図16は、本実施の形態のデータ処理を説明する図である。
【図１７】図17は、本実施の形態のデータ処理装置が実行するデータ処理の流れを説明する第1のフロー図である。
【図１８】図18は、本実施の形態のデータ処理装置が実行するデータ処理の流れを説明する第2のフロー図である。
【図１９】図19は、本実施の形態のデータ処理を具体的に説明する第1の図である。
【図２０】図20は、本実施の形態のデータ処理を具体的に説明する第2の図である。
【図２１】図21は、本実施の形態のデータ処理を具体的に説明する第3の図である。
【図２２】図22は、本実施の形態のデータ処理を具体的に説明する第4の図である。
【図２３】図23は、本実施の形態のデータ処理を具体的に説明する第5の図である。
【図２４】図24は、本実施の形態のデータ処理を具体的に説明する第6の図である。
【図２５】図25は、本実施の形態のデータ処理を具体的に説明する第7の図である。
【図２６】図26は、本実施の形態のデータ処理を具体的に説明する第8の図である。
【図２７】図27は、本実施の形態のデータ処理を具体的に説明する第9の図である。
【図２８】図28は、本実施の形態のデータ処理を具体的に説明する第10の図である。
【図２９】図29は、本実施の形態のデータ処理を具体的に説明する第11の図である。
【図３０】図30は、本実施の形態のデータ処理を具体的に説明する第12の図である。
【図３１】図31は、本実施の形態のデータ処理を具体的に説明する第13の図である。
【図３２】図32は、本実施の形態のデータ処理を具体的に説明する第14の図である。
【図３３】図33は、本実施の形態のデータ処理を具体的に説明する第15の図である。
【図３４】図34は、本実施の形態のデータ処理を具体的に説明する第16の図である。
【図３５】図35は、本実施の形態のデータ処理を具体的に説明する第17の図である。
【図３６】図36は、本実施の形態のデータ処理を具体的に説明する第18の図である。
【図３７】図37は、本実施の形態のデータ処理を具体的に説明する第19の図である。
【図３８】図38は、本実施の形態のデータ処理を具体的に説明する第20の図である。
【図３９】図39は、本実施の形態のデータ処理を具体的に説明する第21の図である。
【図４０】図40は、本実施の形態のデータ処理を具体的に説明する第22の図である。
【図４１】図41は、本実施の形態のデータ処理を具体的に説明する第23の図である。
【図４２】図42は、本実施の形態のデータ処理を具体的に説明する第24の図である。
【図４３】図43は、本実施の形態のデータ処理を具体的に説明する第25の図である。
【図４４】図44は、図4のデータ処理装置DPAの他のソフトウェアブロック図である。
【発明を実施するための形態】
【００１４】
[クエリと処理対象のデータ範囲]
図1、図2は、クエリと処理対象のデータ範囲とを説明する第1、第2の図である。なお、以下の図の説明において、同じ要素については同一の符号を付して、一度した説明を省略する。
【００１５】
図1を参照して、処理対象のデータ範囲について説明する。データ処理を実行する処理装置は、レコードを順次入力する。図1のテーブルT1は、処理装置が入力したレコードをテーブル形式で示す。処理装置は、入力したレコードを自装置のメモリに記憶する。
【００１６】
テーブルT1は、1つのレコードを2行目以降の行に記憶している。テーブルT1の月日欄は、レコードの月日を記憶する。テーブルT1の売上欄は、レコードの売上高(売上と適宜記す)を記憶する。なお、レコードの月日は、レコードに含まれる月日を意味し、レコードの売上は、レコードに含まれる売上を意味する。また、売上の単位は、例えば、万単位(円)である。また、図中、"…"は、省略を示す。
【００１７】
ここで、3日間の売上合計を1日ずつずらしながら計算する第1のクエリが処理装置に入力されるとする。第1のクエリは、例えば、
「SELECT FIRST_VALUE(月日),sum(売上)
RANGE 3 DAYS, SLIDE 1 DAY
FROM data」で記述されるクエリである。
【００１８】
図1の例では、処理装置は、1月p日の売上から1月(p+2)日の売上の合計を1日ずつずらしながら計算する（小文字"p"は、1以上29以下の整数）。そして、処理装置は、計算結果を出力する。
【００１９】
1月p日の売上から1月(p+2)日の売上が、処理対象のデータ範囲(第1のデータ範囲と適宜記す)である。以下、1月p日を第1のデータ範囲の初日、1月(p+2)日を第1のデータ範囲の末日と記す。また、以下、1月p日を"1/p"と適宜記す。
【００２０】
テーブルT2は、計算結果をテーブル形式で示す。テーブルT2は、計算結果を2行目以降の行に記憶している。テーブルT2の月日欄は、第1のデータ範囲の初日を記憶する。テーブルT2の売上合計欄は、第1のデータ範囲の売上合計を記憶する。
【００２１】
図1において、符号Wpは、第1のデータ範囲を示すウィンドウを示す。ただし、図1では、説明を簡略化するため、ウィンドウW1〜ウィンドウW6だけを図示している。ウィンドウは、データ処理の範囲の開始および終了を示す。例えば、ウィンドウW1は、1月1日の売上〜1月3日の売上の売上合計を計算する際におけるウィンドウを示す。
【００２２】
処理装置は、例えば、1月1日の売上〜1月3日の売上の合計(400=100+200+100)を計算する(テーブルT2の2行目参照)。次いで、処理装置は、1月2日の売上〜1月4日の売上の売上合計(430=200+100+130)を計算する(テーブルT2の3行目参照)。なお、ウィンドウW2は、1月2日の売上〜1月4日の売上の売上合計を計算する際におけるウィンドウを示す。
【００２３】
以後、処理装置は、前記したデータ処理を行う。データ処理の対象となるレコードが不要になると、処理装置は、不要なレコードを削除して、メモリの利用効率を向上させる。例えば、処理装置は、1月2日の売上〜1月4日の売上の売上合計の計算が終了すると、1月1日の売上レコード(テーブルT1の2行目のレコード)を装置内のメモリから削除する。
【００２４】
なお、データ処理において、図1で説明したように、ウィンドウをずらすことは、スライドウィンドウと呼ばれる。
【００２５】
次に、図2を参照して、処理対象のデータ範囲について説明する。データ処理を実行する処理装置は、図1で説明したように、レコードを順次入力する。図2のテーブルT1と、図1のテーブルT1は、同じテーブルである。
【００２６】
月毎の、1日(初日)の売上〜7日の売上の売上合計を計算する第2のクエリが処理装置に入力される。第2のクエリは、例えば、
「SELECT FIRST_VALUE(月),sum(売上)
RANGE START 日 == 1, END 日 ==  7 
FROM data」で記述されるクエリである。
【００２７】
図2の例では、処理装置は、1月1日の売上〜1月7日の売上の合計を計算し、計算結果を出力する。
【００２８】
1月1日の売上から1月7日の売上が、処理対象のデータ範囲(第2のデータ範囲と適宜記す)である。以下、1月1日を第2のデータ範囲の初日、1月7日を第2のデータ範囲の末日と記す。テーブルT3は、計算結果をテーブル形式で示す。テーブルT3は、計算結果を2行目以降の行に記憶している。テーブルT3の月欄は、第2のデータ範囲の初日の月を記憶する。テーブルT3の売上合計欄は、第2のデータ範囲の売上合計を記憶する。
【００２９】
図2において、符号W11は、第2のデータ範囲を示すウィンドウを示す。例えば、ウィンドウW11は、1月1日の売上〜1月7日の売上の売上合計を計算する際におけるウィンドウを示す。処理装置は、例えば、1月1日の売上〜1月7日の売上の合計を計算する(テーブルT2の2行目参照)。
【００３０】
なお、データ処理において、図2で説明したように、開始条件と終了条件が指定されたウィンドウは、論理ウィンドウと呼ばれる。図2の例では、開始条件は、1日(初日)の売上であり、終了条件は、7日の売上である。
【００３１】
他にも、データ処理において、時間で、ウィンドウの範囲およびスライド幅を指定する時間ウィンドウや、レコード数で、ウィンドウの範囲およびスライド幅を指定するタプルウィンドウなど様々なウィンドウがある。
【００３２】
[クエリの変更]
前記したように、処理装置は、データ処理が終了すると、データ処理の対象となるレコードが不要になるので、不要なレコードを削除して、メモリの利用効率を向上させる。かかるレコードの削除を行うと、新たなクエリを実行できない場合がある。なお、新たなクエリの実行は、変更されたクエリの実行とも呼ばれる。図3は、新たなクエリを実行できない場合を説明する図である。
【００３３】
図3のテーブルT4は、処理装置が入力したレコードをテーブル形式で示す。テーブルT4は、図1のテーブルT1と同様の構成を有する。処理装置に、1/1の売上〜1/4の売上の売上合計を計算する第3のクエリが入力される。処理装置は、1/1のレコード〜1/5のレコードをメモリに順次記憶する。
【００３４】
図3において、符号W13は、第3のデータ範囲を示すウィンドウを示す。詳しくは、ウィンドウW13は、1月1日の売上〜1月4日の売上の売上合計を計算する際におけるウィンドウを示す。
【００３５】
処理装置は、1月1日(初日)の売上〜1月4日の売上の売上合計を計算し、計算結果を出力すると、1/1のレコード〜1/4のレコードをメモリから削除する。
【００３６】
ここで、1/4のレコードがメモリから削除されたタイミングの後、処理装置に、1/3の売上〜1/5の売上の売上合計を計算する第4のクエリが入力された場合を想定する。この想定において、第4のクエリが入力された時点では、1/1のレコード〜1/4のレコードがメモリから削除されているので、処理装置は、符号W14で示す範囲のレコード(1/3のレコード〜1/5のレコード)の売上合計を計算することはできない。
【００３７】
すなわち、データ処理の実行開始後に、新たなクエリが入力された場合(クエリが変更された場合)、変更以前のウィンドウ状態(符号W13参照)を保持したまま、新たなウィンドウ(符号W14)を設定することが困難な場合がある。
【００３８】
換言すれば、データ処理の実行開始後、入力された新たなクエリを実行するため、処理対象のデータ範囲を変更することが困難な場合がある。また、処理装置は、入力された新たなクエリを実行するため、1つ以上のレコードに複数のウィンドウが重なるように設定することが困難な場合がある。そこで、データ処理の実行開始後であっても、処理対象のデータ範囲を変更することが可能なデータ処理システムを提供する。
【００３９】
なお、前記したように、処理装置が、新たなクエリの実行を行う場合、メモリから削除されたレコードを再度入力することも考えられる。換言すれば、データ処理システムを全てリセットすることも考えられる。このリセットの一例としては、処理装置においてデータ処理を実行するためのプログラムを書き換えて、新たなクエリを実行可能にした後、レコードを再度入力することである。しかし、前記したように、レコードを再度入力することは、現実的ではない。また、前記したプログラムの書き換えをする場合、この書き換えの工数を考慮すれば、プログラムの書き換えは、現実的ではない。
【００４０】
[システム構成図]
図4は、本実施の形態のデータ処理装置DPAを有する情報処理システムSYSの構成図である。情報処理システムSYSは、データ生成装置DGAと、加工装置MAと、データ処理装置DPAと、端末装置TAとを有する。
【００４１】
データ生成装置DGAは、レコードなどの各種データを生成し、加工装置MAに出力する。各レコードは、例えば、在庫管理用のレコードや、売り上げ管理用のレコード、事象のモニタリング用のレコードである。事象のモニタリングは、例えば、降雨、気温など自然現象に関連する事象のモニタリングを含む。事象のモニタリング用のレコードの一例としては、雨量集計レコードなどがある。
【００４２】
加工装置MAは、データ生成装置DGAから出力された各種レコードを入力し、入力した複数のレコードの各々にウィンドウ情報を含める。なお、レコードにウィンドウ情報を含めることを、レコードにウィンドウ情報を埋め込むとも呼ぶ。ウィンドウ情報は、データ処理の範囲の開始および終了を示す情報を含む。
【００４３】
ウィンドウ情報は、専用のプログラムで自動的にレコードに埋め込まれる場合もある。また、ウィンドウ情報は、データ処理の実行を要求する利用者により、レコード加工用のプログラムを介して手動でレコードに埋め込まれる場合もある。利用者は、所望するデータ処理の範囲に適合するように、ウィンドウ情報をレコードに埋め込む。
【００４４】
加工装置MAは、ウィンドウ情報を含むレコードをデータ処理装置DPAに出力する。
【００４５】
データ処理装置DPAは、ウィンドウ情報を含むレコードを入力し、端末装置TAから入力されたクエリに基づき、レコードに含まれる処理対象のレコードにデータ処理を実行する。そして、データ処理装置DPAは、処理結果を、端末装置TAに出力する。なお、データ処理は、事象のモニタリングや、BI(Business Integrate)、ストリーム処理において利用される。
【００４６】
端末装置TAは、加工装置MA、データ処理装置DPAを操作する装置である。
【００４７】
[データ処理装置DPA]
図5、図6を参照して、図4のデータ処理装置DPAについて説明する。図5は、図4のデータ処理装置DPAのハードウェアブロック図である。
【００４８】
データ処理装置DPAは、バスBに接続された、CPU101と、RAM102と、ROM103と、通信装置104と、ストレージ装置105と、外部記憶媒体読み取り装置106とを有する。なお、CPUは、" Central Processing Unit "の略語、RAMは"Random Access Memory"の略語、ROMは、" Read Only Memory"の略語である。
【００４９】
CPU101は、データ処理装置DPAの全体を制御する中央演算処理装置である。RAM102は、CPU101が実行する処理や、データ処理プログラムPG1が実行する各ステップにおいて生成(算出)されたデータなどを一時的に記憶する記憶装置である。データ処理プログラムPG1は、入力されたレコードにデータ処理を実行するプログラムである。RAM102は、レコードを記憶する記憶装置の一例である。RAM102は、データ処理に関する各種データを記憶するデータ処理領域RGを有する。RAM102は、例えばDRAM(Dynamic Random Access Memory)などの半導体メモリである。
【００５０】
ROM103は、各種データを記憶する。通信装置104は、LAN(Local Area Network)などのネットワークに接続する装置である。通信装置104は、図4の加工装置MAや、端末装置TAと通信する。なお、通信装置104は、例えばネットワークインターフェイスカード(NIC：Network Interface Card)を有する。
【００５１】
ストレージ装置105は、例えばハードディスクドライブや、ソリッドステートドライブや、不揮発性の半導体メモリなどのデータ格納装置である。
【００５２】
外部記憶媒体読み取り装置106は、外部記憶媒体MDに記憶されたデータを読み取る装置である。外部記憶媒体MDは、不揮発性の記憶媒体であり、例えば、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)などの可搬型記憶媒体である。
【００５３】
データ処理プログラムPG1の実行ファイルは、ストレージ装置105に記憶されている。CPU101は、データ処理装置DPAの起動時に、ストレージ装置105からデータ処理プログラムPG1の実行ファイルを読み出し、RAM102に展開する。なお、データ処理プログラムPG1の実行ファイルを、外部記憶媒体MDに記憶してもよい。CPU101は、データ処理装置DPAの起動時に、外部記憶媒体MDからデータ処理プログラムPG1の実行ファイルを読み出し、RAM102に展開する。
【００５４】
図6は、図4のデータ処理装置DPAのソフトウェアブロック図である。データ処理プログラムPG1は、クエリ入力部11と、レコード入力部12と、ウィンドウ処理部13と、中間データ処理部14と、データ出力部15とを有する。
【００５５】
クエリ入力部11は、図4の端末装置TAから出力されたクエリを入力し、ウィンドウ処理部13、中間データ処理部14、データ出力部15に出力する。
【００５６】
レコード入力部12は、図4の加工装置TAから出力されたレコードを入力し、ウィンドウ処理部13、中間データ処理部14に出力する。
【００５７】
ウィンドウ処理部13は、入力されたレコードに、ウィンドウ情報に基づきウィンドウを設定する。中間データ処理部14は、ウィンドウが設定されたレコードに、入力されたクエリに基づき、データ処理を実行し、処理結果をデータ出力部15に出力する。データ出力部15は、処理結果を端末装置TAに出力する。
【００５８】
[加工装置MA]
図7は、図4の加工装置MAのハードウェアブロック図である。加工装置MAは、バスBに接続された、CPU201と、RAM202と、ROM203と、通信装置204と、ストレージ装置205と、外部記憶媒体読み取り装置206とを有する。
【００５９】
CPU201は、加工装置MAの全体を制御する中央演算処理装置である。RAM202は、CPU201が実行する処理や、加工プログラムPG2が実行する各ステップにおいて生成(算出)されたデータなどを一時的に記憶する記憶装置である。RAM202は、例えばDRAMなどの半導体メモリである。
【００６０】
加工プログラムPG2は、データ生成装置DGAから出力されたレコードを加工するプログラムである。具体的には、対応する値(データとも呼ばれる)が順に入力される複数の項目(例えば、レコード)の各々について、第1のフラグの設定、および/または、第2のフラグの設定を行うことを許容する。加工プログラムPG2は、図4で説明した、ウィンドウ情報をレコードに埋め込むための専用のプログラムの一例である。加工プログラムPG2は、加工後のレコードをデータ処理装置DPAに出力する。なお、加工プログラムPG2は、許容部とも呼ばれる。
【００６１】
ROM203は、各種データを記憶する。通信装置204は、LANなどのネットワークに接続する装置である。通信装置204は、図4のデータ生成装置DGAや、端末装置TAや、データ処理装置DPAと通信する。なお、通信装置204は、例えばネットワークインターフェイスカードを有する。
【００６２】
ストレージ装置205は、例えばハードディスクドライブや、ソリッドステートドライブや、不揮発性の半導体メモリなどのデータ格納装置である。
【００６３】
外部記憶媒体読み取り装置206は、外部記憶媒体MDに記憶されたデータを読み取る装置である。
【００６４】
加工プログラムPG2の実行ファイルは、ストレージ装置205に記憶されている。CPU201は、加工装置MAの起動時に、ストレージ装置205から加工プログラムPG2の実行ファイルを読み出し、RAM202に展開する。なお、加工プログラムPG2の実行ファイルを、外部記憶媒体MDに記憶してもよい。CPU201は、加工装置MAの起動時に、外部記憶媒体MDから加工プログラムPG2の実行ファイルを読み出し、RAM202に展開する。
【００６５】
[データ処理]
図8〜図15は、本実施の形態におけるデータ処理を説明する第1〜第8の図である。図8を参照して第1のデータ処理について説明する。
【００６６】
(第1のデータ処理)
図8のテーブルT11は、レコード入力部12が入力したレコードをテーブル形式で示す。このレコードは、第1の属性として月日、第2の属性として売上、第3の属性としてウィンドウの開始を示す開始情報、第4の属性としてウィンドウの終了を示す終了情報を含む。開始情報は、データ処理の範囲の開始を示す情報である。終了情報は、データ処理の範囲の終了を示す情報である。すなわち、図4で説明したウィンドウ情報は、開始情報、終了情報を含む。
【００６７】
図4のデータ生成装置DGAは、第1の属性として月日、第2の属性として売上を含むレコードを図4の加工装置MAに出力する。加工装置MAの加工プログラムPG2(図7参照)は、図4で説明したように、データ生成装置DGAから出力されたレコードを受信し、受信したレコードに開始情報、終了情報を埋め込む。そして、加工装置MAの加工プログラムPG2は、このレコードをデータ処理装置DPAに出力する。
【００６８】
データ処理装置DPAのレコード入力部12は、加工装置MAから出力されたレコードを入力し、図8に示すテーブル形式でRAM102に記憶する。図8の実線矢印は、レコードが順に入力されることを示している。
【００６９】
データ処理装置DPAは、1個のレコードが入力される度に、開始情報および終了情報に基づき、後記するウィンドウの設定処理、データ処理を実行する。
【００７０】
テーブルT11は、1つのレコードを2行目以降の行に記憶している。テーブルT11の月日欄は、レコードの月日を記憶する。テーブルT11の売上欄は、レコードの売上を記憶する。テーブルT11の開始欄は、レコードの開始情報を記憶する。テーブルT11の終了欄は、レコードの終了情報を記憶する。
【００７１】
テーブルの開始欄における、数値は、開始フラグである。開始フラグの1以上の数値または後記する"-1"は、ウィンドウの開始を示すフラグである。開始フラグの"0"は、ウィンドウの開始を示さないフラグである。
【００７２】
テーブルの終了欄における、数値は、終了フラグである。終了フラグの1以上の数値または後記する"-1"は、ウィンドウの終了を示す終了フラグである。終了フラグの"0"は、ウィンドウの終了を示さないフラグである。
【００７３】
図8の点線矢印は、ウィンドウの開始を示す開始フラグと、この開始フラグに対応する、ウィンドウの終了を示す終了フラグとを（換言すれば、この開始フラグのペアの終了フラグ）とを示す矢印である。この矢印で示す開始フラグを含むレコードがウィンドウの開始点になる。また、この矢印で示す終了フラグを含むレコードがウィンドウの終了点になる。
【００７４】
ウィンドウ処理部13は、第1のフラグがN番目に設定されたレコードに対応づけた値(データとも呼ばれる)が入力され、かつ、第2のフラグがM番目に設定されたレコードに対応づけたデータが入力されたことを検出する。換言すれば、ウィンドウ処理部13は、第1のフラグが設定されたN番目のレコードに対応づけた値(データとも呼ばれる)が入力され、かつ、第2のフラグが設定されたM番目のレコードに対応づけた値(データとも呼ばれる)が入力されたことを検出する。大文字Nは1以上の整数であり、大文字MはN以上の整数である。なお、レコードに対応づけた値（データ）は、レコードに含まれるデータを意味する。
【００７５】
第1のフラグは、所定の処理の対象となるレコードの範囲の開始を示すフラグである。そして、第2のフラグは、第1のフラグに対応し、前記した範囲の終了を示すフラグである。ここで、第1のフラグ、および、第2のフラグは、前記した範囲の数を示す情報である。この範囲を示す情報は、例えば数値である。
【００７６】
第1のフラグは、例えば、レコードの開始フラグ"1"である。第2のフラグは、例えば、レコードの終了フラグ"1"である。
【００７７】
中間データ処理部14は、第1のフラグがN番目に設定されたレコードに対応づけて入力されたデータ〜第2のフラグがM番目に設定されたレコードに対応づけて入力されたデータまでに対して所定の処理を実行する。なお、レコードに対応づけて入力されたデータは、入力されたレコードに含まれるデータを意味する。
【００７８】
所定の処理は、クエリの処理情報に基づく処理である。所定の処理は、例えば、レコードに含まれる売上の平均値を計算する処理や、レコードに含まれる売上の合計を計算する処理である。他にも所定の処理は、複雑な集合演算など様々な処理である。
【００７９】
図8の例では、1/1のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"0"である。1/2のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。
【００８０】
ウィンドウ処理部13は、以下の第1のデータ、かつ、第2のデータが入力されたことを検出する。第1のデータは、第1のフラグ(開始フラグ"1")がN番目(Nは1)に設定された1/1のレコードに対応づけたデータ(売上"100")である。第2のデータは、第2のフラグ(終了フラグ"1")がM(Mは2)番目に設定された1/2のレコードに対応づけたデータ(売上"200")である。
【００８１】
そして、中間データ処理部14は、第1のデータ〜第2のデータまでに対して所定の処理(例えば、売上の平均値を計算)を実行する。データ出力部15は、出力結果(例えば、売上"150")を出力する処理をN番目(Nは1)のレコードから順に実行する。
【００８２】
以上説明したように、レコード入力部12は、処理対象のデータと、処理対象の範囲を示す、第1のフラグ、第2のフラグの何れか1または全てを含む複数のレコードを順次入力する。第1、第2のフラグは、処理対象の範囲を示すフラグである。
【００８３】
そして、ウィンドウ処理部13は、第1のフラグを含む第1のレコードの入力を検出し、さらに、前記第2のフラグを含む第2のレコードの入力を検出する。中間データ処理部14は、この検出が実行されると、第1のレコードの処理対象のデータから第2のレコードの処理対象のデータまでに対して所定の処理を実行する。そして、データ出力部15は、処理結果を出力する。
【００８４】
具体的に説明する。ウィンドウ処理部13は、1/1のレコード、1/2のレコードに対してウィンドウW21を設定する。中間データ処理部14は、クエリの処理情報に基づき、ウィンドウW21が設定された2個のレコードにデータ処理を実行する。このデータ処理の内容は、例えば、ウィンドウが設定されたレコードに含まれる売上の平均を算出することである。
【００８５】
1/3、1/4の開始フラグおよび終了フラグは、それぞれ"0"、"0"である。従って、ウィンドウ処理部13は、1/3、1/4のレコードに、ウィンドウを設定しない。
【００８６】
1/5のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"0"である。1/6のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"1"である。従って、ウィンドウ処理部13は、1/5のレコード、1/6のレコードに対してウィンドウW22を設定する。中間データ処理部14は、クエリの処理情報に基づき、ウィンドウW22が設定された2個のレコードにデータ処理を実行する。なお、以後の説明においても、中間データ処理部14は、ウィンドウが設定されたレコードにデータ処理を実行する。
【００８７】
1/6のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"1"である。1/7のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。従って、ウィンドウ処理部13は、1/6のレコード、1/7のレコードに対してウィンドウW23を設定する。
【００８８】
1/8のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"1"である。従って、ウィンドウ処理部13は、1/8のレコードに対してウィンドウW24を設定する。
【００８９】
図8で説明したウィンドウの設定手法によれば、レコードの開始フラグおよび終了フラグに基づき、ウィンドウを動的に設定している。そのため、データ処理を実行中にデータ処理の対象となるデータ範囲を動的に変更できる。その結果、新たなクエリが入力されても、このクエリの実行が可能になり、利用者の意図に沿ったデータ処理が可能になる。
【００９０】
例えば、1/5のレコードに含まれる売上と、1/6のレコードに含まれる売上との合計を計算する第5のクエリを実行する場合を想定する。ここで、ウィンドウW22とウィンドウW23とが、1/6のレコードに対して重ねて設定されている。そのため、1/6のレコードと1/7のレコードに対する処理が実行されるまで、1/6のレコードは、削除されない。
【００９１】
従って、1/6のレコードに含まれる売上と、1/7のレコードに含まれる売上との合計を計算する第6のクエリが入力されても、このクエリの実行が可能になる。すなわち、第5のクエリについてのデータ処理の開始後であっても、処理対象のデータ範囲を動的に変更することが可能である。
【００９２】
他にも、例えば、売上の変動を監視したい場合を想定する。この想定において、利用者は、変動の監視を開始する開始レコードの開始フラグに開始フラグ"1"を設定し、開始レコードの終了フラグに終了フラグ"0"を設定する。そして、変動の監視を終了する終了レコードの終了フラグに終了フラグ"1"を設定し、終了レコードの開始フラグに開始フラグ"0"を設定する。さらに、利用者は、開始レコードと終了レコードとの間のレコードの開始フラグおよび終了フラグに"0"を設定する。
【００９３】
かかる設定を行えば、中間データ処理部14は、開始レコードに含まれる処理対象のデータから終了レコードに含まれる処理対象のデータに対して所定のデータ処理（前記例では、売上変動の計算）を実行する。
【００９４】
このようにレコードに開始フラグ、終了フラグを設定すれば、利用者は、状況に応じて臨機応変に売上の変動を開始したいタイミングを設定することができる。その結果、利用者の利便性が向上する。
【００９５】
なお、中間データ処理部14は、データ処理が実行されたレコードであって、以後、データ処理が実行されないレコードについては削除してメモリの利用効率を向上させる。
【００９６】
(第2のデータ処理)
第2のデータ処理では、1つのレコードに複数回のウィンドウの開始(または、終了)を定義する。例えば、図8において、1/5のレコード、1/6のレコードに対してウィンドウを設定し、1/5のレコード〜1/7のレコードに対してウィンドウを設定する。そして、中間データ処理部14は、ウィンドウが設定されたレコードに対してデータ処理を実行する。
【００９７】
かかる定義を行うため、開始フラグ、終了フラグの記号として、例えば、2以上の整数を利用する。ウィンドウ処理部13は、開始フラグおよび終了フラグの数値に応じたウィンドウをレコードに設定する。
【００９８】
ウィンドウ処理部13は、開始フラグが2以上の数値を含むレコードに、この数値と同じ数のウィンドウの開始を設定する。そして、ウィンドウ処理部13は、この開始フラグに対応する終了フラグを含むレコードに、開始が設定されたウィンドウの終了を設定する。以下、図9、図10を参照して、この設定について説明する。
【００９９】
図9のテーブルT12は、レコード入力部12が入力したレコードをテーブル形式で示す。このレコードは、図8で説明したレコードと同一の属性を含む。図9の点線矢印は、ウィンドウの開始フラグと、この開始フラグに対応する、ウィンドウの終了フラグとを示す矢印である。なお、以下の図10以降では、この対応関係を示す矢印の記載を省略する。
【０１００】
図4のデータ生成装置DGAは、図8で説明したレコードと同一の属性を含むレコードをデータ処理装置DPAに出力する。データ処理装置DPAのレコード入力部12は、加工装置MAから出力されたレコードを受信し、図9に示すテーブル形式でRAM102に記憶する。
【０１０１】
テーブルT12は、図8のテーブルT1と同じ構成である。レコードの開始フラグの数値(2以上の整数)は、ウィンドウの開始を示す開始フラグである。レコードの終了フラグの数値(2以上の整数)は、このウィンドウの終了を示す終了フラグである。レコードの開始"0"は、レコードの終了フラグ"0"は、図8で説明したので、その説明を省略する。
【０１０２】
図9の例では、1/1のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"0"である。1/2のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。
【０１０３】
従って、ウィンドウ処理部13は、第1のフラグ(レコードの開始フラグ"1")が設定されたN(Nは1)番目のレコードに、第1のフラグにより示される個数(1個)の、範囲の開始を示す開始点を設定する。すなわち、N(Nは1)番目のレコードに、第1のフラグにより示される個数の開始点を設定する。この開始点は、ウィンドウW31の開始点である。なお、この範囲は、所定の処理の対象となるレコードの範囲である。
【０１０４】
ウィンドウ処理部13は、N(Nは1)番目のレコード以降に入力されたレコードであって、第2のフラグが設定された、個数(1個)のレコード(1/2のレコード)に、範囲の終了を示す終了点を設定する。この終了点は、ウィンドウW32の終了点である。
【０１０５】
具体的に説明する。ウィンドウ処理部13は、1/1のレコード、1/2のレコードに対してウィンドウW31を設定する。中間データ処理部14は、クエリの処理情報に基づき、ウィンドウW31が設定された2個のレコードにデータ処理を実行する。このデータ処理の内容は、例えば、ウィンドウが設定されたレコードの売上の平均を算出することである。
【０１０６】
1/3のレコードの開始フラグおよび終了フラグは、それぞれ"2"、"1"である。1/4のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"2"である。従って、ウィンドウ処理部13は、1/3のレコードに2個のウィンドウW32、W33の開始点を設定する。そして、ウィンドウ処理部13は、1/3のレコードにウィンドウW32の終了点を設定し、1/4のレコードにウィンドウW33の終了点を設定する。すなわち、ウィンドウ処理部13は、1/3のレコードにウィンドウW32を設定し、1/3のレコードと1/4のレコードとにウィンドウW33を設定する。さらに、ウィンドウ処理部13は、1/4のレコードにウィンドウW34の開始点と終了点とを設定する。すなわち、ウィンドウ処理部13は、1/4のレコードにウィンドウW34を設定する。以上説明したように、2以上の数値の終了フラグを含むレコードには、この数値と同じ数のウィンドウの終了点が設定される。
【０１０７】
1/5のレコードの開始フラグおよび終了フラグは、それぞれ"2"、"0"である。1/6のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。1/7のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"1"である。
【０１０８】
従って、ウィンドウ処理部13は、1/5のレコードに2個のウィンドウW35、W36の開始点を設定する。そして、ウィンドウ処理部13は、1/6のレコードにウィンドウW35の終了点を設定し、1/7のレコードにウィンドウW36の終了点を設定する。すなわち、ウィンドウ処理部13は、1/5のレコードと1/6のレコードとにウィンドウW35を設定し、1/5のレコード〜1/7のレコードにウィンドウW36を設定する。
【０１０９】
1/7のレコードの開始フラグおよび終了フラグは、それぞれ"1"、"1"である。1/8のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。また、1/7のレコードには、既に、ウィンドウW36の終了点が設定されている。従って、ウィンドウ処理部13は、1/7のレコード、1/8のレコードに対してウィンドウW37を設定する。
【０１１０】
ここで、例えば、1/5のレコードに含まれる売上と、1/6のレコードに含まれる売上との合計を計算する第5のクエリを実行する場合を想定する。ここで、ウィンドウW35とウィンドウW36とが、1/5のレコード、1/6のレコードに対して重ねて設定されている。そのため、1/5のレコード〜1/7のレコードに対する処理が実行されるまで、1/5のレコード、1/6のレコードは、削除されない。
【０１１１】
従って、1/5のレコードに含まれる売上〜1/7のレコードに含まれる売上の合計を計算する第7のクエリが入力されても、このクエリの実行が可能になる。すなわち、第5のクエリについてのデータ処理の開始後であっても、処理対象のデータ範囲を動的に変更することが可能である。
【０１１２】
図9で説明したウィンドウの設定手法によれば、1個のレコードに複数回のウィンドウの開始(または、終了)を定義でき、利用者の意図に沿ったウィンドウを設定し、データ処理を実行することができる。そのため、例えば、月初めからの売上合計を週毎に算出するといったデータ処理が可能になる。
【０１１３】
次に、ウィンドウ処理部13が、図10のテーブルT13に示したレコードにウィンドウを設定する場合を想定する。図10のテーブルT13は、レコード入力部12が入力したレコードをテーブル形式で示す。このレコードは、図8で説明したレコードと同一の属性を含む。
【０１１４】
図10の例では、1/1のレコードの開始フラグおよび終了フラグは、それぞれ"5"、"0"である。1/2、1/3のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。1/4のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"0"である。1/5〜1/7のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。
【０１１５】
従って、ウィンドウ処理部13は、第1のフラグ(レコードの開始フラグ"5")が設定されたN(Nは1)番目のレコードに、第1のフラグにより示される個数(5個)の、範囲の開始を示す開始点を設定する。すなわち、N(Nは1)番目のレコードに、第1のフラグにより示される個数の開始点を設定する。この開始点は、ウィンドウW41〜ウィンドウW45の開始点である。なお、この範囲は、所定の処理の対象となるレコードの範囲である。
【０１１６】
ウィンドウ処理部13は、N(Nは1)番目のレコード以降に入力されたレコードであって、第2のフラグが設定された、前記した個数(5個)のレコード(1/2、1/3、1/5、1/6、1/7のレコード)に、前記した範囲の終了を示す終了点を設定する。この終了点は、ウィンドウW41〜ウィンドウW45の終了点である。
【０１１７】
以上説明したように、ウィンドウ処理部13は、第1のフラグを含む第1のレコード(1/1のレコード)に、第1のフラグにより示される個数(5個)の、範囲の開始を示す開始点を設定する。なお、この範囲は、所定の処理の対象となるレコードの範囲である。そして、ウィンドウ処理部13は、第1のレコード以降に入力されたレコードであって、第2のフラグが設定された、前記した個数の第2のレコード(1/2、1/3、1/5、1/6、1/7のレコード)の各々に範囲の終了を示す終了点を設定する。
【０１１８】
そして、中間データ処理部14は、開始点が設定された第1のレコードの処理対象のデータ(売上"100")から終了点が設定された第2のレコードの処理対象のデータまでに対して所定の処理を実行する。
【０１１９】
具体的に説明する。ウィンドウ処理部13は、1/1のレコードに5個のウィンドウW41〜W45の開始点を設定する。そして、ウィンドウ処理部13は、1/2のレコードにウィンドウW41の終了点を設定し、1/3のレコードにウィンドウW42の終了点を設定し、1/5のレコードにウィンドウW43の終了点を設定する。そして、ウィンドウ処理部13は、1/6のレコードにウィンドウW44の終了点を設定し、1/7のレコードにウィンドウW45の終了点を設定する。
【０１２０】
そして、中間データ処理部14は、各ウィンドウW41〜ウィンドウW45が設定された複数のレコードのデータに対して所定の処理(例えば、売上の平均値を計算)を実行する。前記の例では、中間データ処理部14は、ウィンドウW41が設定された複数のレコードのデータ(売上"100"、売上"200")の平均値("150")を計算する。また、中間データ処理部14は、ウィンドウW42が設定された複数のレコードのデータ(売上"100"、売上"200"、"100")の平均値("133")を計算する。
【０１２１】
(第3のデータ処理)
第2のデータ処理では、1個のレコードに複数回のウィンドウの開始(または、終了)を定義する場合、定義するウィンドウの数、すなわち前記した複数回は、有限回数であった。換言すれば、第2のデータ処理では、1個のレコードに予め定められた個数のウィンドウの開始(または、終了)を定義することしかできなかった。
【０１２２】
例えば、図10で説明した例において、利用者が、1/1のレコードに開始フラグ"5"を埋め込んだ後に、1/1からの売上合計を随時計算したいと所望するとする。この場合、定義するウィンドウの数が有限なので、ウィンドウの範囲を伸ばすことができない。その結果、かかる利用者のニーズを満たすことができない。
【０１２３】
そこで、1個のレコードに無限回のウィンドウの開始(または、終了)を定義する。この定義のために、レコードの開始フラグ、終了フラグの何れかを無限符号とする。無限符号は、例えば"-1"である。以上説明したように、前記した第1のフラグは、範囲の数が無限であることを示す情報(無限符号)である。以下、図11を参照して、この設定について説明する。
【０１２４】
例えば、ウィンドウ処理部13が、図11のテーブルT14に示したレコードにウィンドウを設定する場合を想定する。図11のテーブルT14は、レコード入力部12が入力したレコードをテーブル形式で示す。このレコードは、図8で説明したレコードと同一の属性を含む。
【０１２５】
図11の例では、1/1のレコードの開始フラグおよび終了フラグは、それぞれ"-1"(無限符号)、"0"である。1/2、1/3のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。1/4のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"0"である。1/5〜1/8のレコードの開始フラグおよび終了フラグは、それぞれ"0"、"1"である。
【０１２６】
従って、ウィンドウ処理部13は、無限符号である第1のフラグが設定されたN(Nは1)番目のレコードに、無限の開始点を設定する。この開始点は、ウィンドウW51〜W5qの開始点(小文字qは、2以上の整数)である。次いで、ウィンドウ処理部13は、N番目のレコード以降に入力されたレコードであって、第2のフラグが設定された複数のレコード(1/2〜1/8のレコード)の各々に終了点を設定する。
【０１２７】
以上説明したように、ウィンドウ処理部13は、第1のフラグが設定された第1のレコード(1/1のレコード)に、無限の開始点を設定し、第1のレコード以降に入力されたレコードであって、第2のフラグが設定された複数の第2のレコードの各々に終了点を設定する。
【０１２８】
具体的に説明する。ウィンドウ処理部13は、1/1のレコードにq個のウィンドウW51〜W5qの開始点を設定する(小文字qは、2以上の整数)。なお、図11では、説明を簡略化するため、ウィンドウW51〜ウィンドウW56だけを図示している。
【０１２９】
そして、ウィンドウ処理部13は、1/2のレコードにウィンドウW51の終了点を設定し、1/3のレコードにウィンドウW52の終了点を設定し、1/5のレコードにウィンドウW53の終了点を設定する。そして、ウィンドウ処理部13は、1/6のレコードにウィンドウW54の終了点を設定し、1/7のレコードにウィンドウW55の終了点を設定する。そして、ウィンドウ処理部13は、1/8のレコードにウィンドウW56の終了点を設定する。
【０１３０】
図11で説明したウィンドウの設定手法によれば、1個のレコードに無限回のウィンドウの開始(または、終了)を定義することができる。そのため、設定するウィンドウの個数をデータ処理の開始時に決定する必要がない。その結果、1/1からの売上合計を随時計算するという、利用者の要求を満たすことができる。
【０１３１】
(第4のデータ処理)
第3のデータ処理では、1個のレコードに無限回のウィンドウの開始(または、終了)を定義することができた。第4のデータ処理では、無限回のウィンドウの設定を停止(キャンセルとも呼ぶ)する処理について説明する。このキャンセルのために、レコードに、特殊情報を埋め込む。この特殊情報は、無限回のウィンドウの設定をキャンセルすることを示す記号である。
【０１３２】
加工装置MAの加工プログラムPG2は、無限回のウィンドウの設定をキャンセルすることを示す特殊情報をレコードに追加設定する。この特殊情報は、終了点の設定の停止を示す第3のフラグの一例である。
【０１３３】
すなわち、加工プログラムPG2は、レコードについて、終了点の設定の停止を示す第3のフラグの設定を行うことを許容する。そして、加工装置MAは、前記したレコードをデータ処理装置DPAに出力する。
【０１３４】
データ処理装置DPAのレコード入力部12は、加工装置MAから出力された、終了点の設定の停止を示す第3のフラグを更に含むレコードを入力し、図12に示すテーブル形式でRAM102に記憶する。
【０１３５】
テーブルT15は、1つのレコードを2行目以降の行に記憶している。テーブルT15は、図8のテーブルT11に特殊欄を追加したテーブルである。特殊欄は、無限回のウィンドウの設定をキャンセルすることを示す記号"1"、または、意味を持たないフラグである"0"を記憶する。
【０１３６】
テーブルT15において、1/1のレコード〜1/5のレコードは、特殊欄の記号"0"を除いて、図11のテーブルT14における、1/1のレコード〜1/5のレコードと同じである。1/6のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"1"、"1"、"0"である。すなわち、1/6の特殊情報は、無限回のウィンドウの設定をキャンセルすることを示す記号"1"である。
【０１３７】
従って、ウィンドウ処理部13は、1/1のレコードに3個のウィンドウW61〜W63の開始点を設定する。そして、ウィンドウ処理部13は、1/2のレコードにウィンドウW61の終了点を設定し、1/3のレコードにウィンドウW62の終了点を設定し、1/5のレコードにウィンドウW63の終了点を設定する。すなわち、ウィンドウ処理部13は、1/1、1/2のレコードにウィンドウW61を設定し、1/1〜1/3のレコードにウィンドウW62を設定し、1/1〜1/5のレコードにウィンドウW63を設定する。
【０１３８】
ウィンドウ処理部13は、範囲の数が無限であることを示す情報である第1のフラグ(無限符号)が設定された1/1のレコードの入力を検出した後、第3のフラグ(特殊情報"1")が設定された1/6のレコードの入力を検出する。すると、ウィンドウ処理部13は、1/6のレコードの入力以後、以下の処理を実行する。すなわち、ウィンドウ処理部13は、第3のフラグが設定されたレコード以降のレコードに、前記した第1のフラグ(無限符号)に対応する終了点を設定する処理を停止する。
【０１３９】
以上説明したように、ウィンドウ処理部13は、範囲の数が無限であることを示す情報である第1のフラグが設定された第1のレコード(1/1のレコード)の入力を検出した後、第3のフラグが設定された1/6のレコードの入力を検出する。すると、ウィンドウ処理部13は、第3のフラグが設定されたレコード以降のレコードに終了点を設定する処理を停止する。
【０１４０】
具体的に説明する。ウィンドウ処理部13は、第3のフラグが設定された1/6のレコードの入力を検出すると、図12で示したように、1/1のレコードを開始点とするウィンドウの設定処理をキャンセルする。
【０１４１】
1/6のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"1"、"1"、"0"である。1/7のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"0"、"1"、"1"である。1/8のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"0"、"0"、"1"である。従って、ウィンドウ処理部13は、1/6のレコード、1/7のレコードに対してウィンドウW64を設定する。そして、ウィンドウ処理部13は、1/7のレコード、1/8のレコードに対してウィンドウW65を設定する。
【０１４２】
図12で説明したウィンドウの設定手法によれば、無限回のウィンドウの設定をキャンセルすることができる。換言すれば、1個のレコードに無限回のウィンドウの開始(または、終了)を定義しても、データ処理の対象となるデータ範囲の再設定(仕切り直し)が可能になる。
【０１４３】
例えば、各月において、月初日から途中の日迄までの売上合計を日毎に計算する場合を想定する。この途中の日は、月初日から月末日までの日である。1月の場合、途中の日は、1/1〜1/31である。かかる計算を実現するため、ある月において、月初日のレコードに無限回のウィンドウの開始を設定し、ある月の日毎のレコードに、このウィンドウの終了を設定する。
【０１４４】
各月において、月初日から途中の日までの売上合計を日毎に計算する場合のレコードについて、図13を参照して説明する。
【０１４５】
テーブルT16は、図12のテーブルT15と同じ構成である。テーブルT15において、1/1のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"0"、"-1"、"1"である。1/2〜1/31のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"0"、"0"、"1"である。2/1のレコードの特殊情報、開始フラグおよび終了フラグは、それぞれ"1"、"-1"、"1"である。従って、ウィンドウ処理部13は、1/1のレコード〜1/r(小文字rは01〜31までの整数)のレコードにウィンドウW10rを設定する。そして、中間データ処理部14は、各ウィンドウを設定した各レコードの売上の合計を計算する。ウィンドウW1001〜ウィンドウW1031が設定された各レコードの売上の合計の計算が終了すると、中間データ処理部14は、各レコードをRAM102から消去する。
【０１４６】
なお、2月のレコードについても1月と同様のウィンドウの設定を行う。ウィンドウ処理部13は、2/1のレコード〜2/3のレコードにウィンドウW2001〜W2003を設定する。
【０１４７】
図12で説明したウィンドウの設定手法によれば、図13で説明したように、月初日から途中の日迄までの売上合計を日毎に計算することができる。
【０１４８】
(第5のデータ処理)
図11〜図13で説明したように、無限回のウィンドウをレコードに設定した場合、ウィンドウの設定がキャンセルされるまで、すなわち、特殊情報"1"を含むレコードが入力されるまで、各レコードをRAM102に記憶する必要がある。無限回のウィンドウが設定されたレコードが多数あると、多数のレコードをRAM102に記憶する必要がある。その結果、多数のレコードの記憶によりRAM102のメモリ領域が圧迫され、メモリ領域を有効利用できなくなる。
【０１４９】
そこで、データ処理装置DPAは、無限回のウィンドウをレコードに設定すると、このレコードに基づきデータ処理を実行して中間データを生成したら、このレコードをRAM102から削除する。
【０１５０】
例えば、ウィンドウの開始点を設定したレコードを基準にして、このレコードから後のレコードに対してデータ処理を行う場合、中間データ処理部14は、以下の処理を行う。また、ウィンドウの終了点を設定したレコードを基準にして、このレコードから前のレコードに対してデータ処理を行う場合、中間データ処理部14は、以下の処理を行う。すなわち、中間データ処理部14は、データ処理の実行結果をバッファに記憶した後、入力したレコードを削除する。
【０１５１】
メモリ領域の有効利用を考慮したデータ処理について、図11、図14を参照して説明する。このデータ処理は、月初日から途中の日迄までの売上合計を日毎に計算するデータ処理である。
【０１５２】
テーブルT17は、図11のテーブルT14の一部を抜き出したテーブルである。図14の点線の右矢印は、月日を示す。符号MDT1〜MDT6で示す数値は、中間データを示す。符号OUT1〜OUT4で示す矢印は、中間データの出力を示す。符号AD1〜AD5は、加算を示す。
【０１５３】
レコード入力部12は、1/1のレコード〜1/s(小文字sは1〜6までの整数)のレコードを順次入力し、RAM102に記憶する。ウィンドウ処理部13は、レコードの入力に応じて、1/1のレコード〜1/sのレコードにウィンドウW5sを設定する（ウィンドウW5sについては、図11参照）。
【０１５４】
中間データ処理部14は、1/1のレコードがRAM102に記憶されると、1/1のレコードの売上合計"100"を算出し、中間データMDT1としてRAM102に記憶する。そして、中間データ処理部14は、1/1のレコードをRAM102から削除する。
【０１５５】
次いで、中間データ処理部14は、1/2のレコードがRAM102に記憶されると、1/2のレコードの売上"200"と中間データMD1（"100"）とを加算（符号AD1参照）した売上合計"300"を計算し、中間データMDT2としてRAM102に記憶する。ウィンドウW51(図11参照)が、1/1、1/2のレコードに設定されているので、データ出力部15は、1/1の売上、1/2の売上の売上合計"300"(符号MDT2参照)を出力する（符号OUT1参照）。そして、中間データ処理部14は、1/2のレコードをRAM102から削除する。
【０１５６】
次いで、中間データ処理部14は、1/3のレコードがRAM102に記憶されると、1/3のレコードの売上"100"と中間データMDT2（"300"）とを加算（符号AD2参照）した売上合計"400"を計算し、中間データMDT3としてRAM102に記憶する。そして、中間データ処理部14は、1/3のレコードをRAM102から削除する。ここで、ウィンドウW52(図11参照)が、1/1〜1/3のレコードに設定されているので、データ出力部15は、1/1の売上〜1/3の売上の売上合計"400"(符号MDT3参照)を出力する（符号OUT2参照）。
【０１５７】
次いで、中間データ処理部14は、1/4のレコードがRAM102に記憶されると、1/4のレコードの売上"130"と中間データMDT3（"400"）とを加算（符号AD3参照）した売上合計"530"を計算し、中間データMDT4としてRAM102に記憶する。そして、中間データ処理部14は、1/4のレコードをRAM102から削除する。ここで、ウィンドウは、1/1〜1/4のレコードに設定されていないので、データ出力部15は、1/1の売上〜1/4の売上の売上合計"530"(符号MDT4参照)を出力しない。
【０１５８】
次いで、中間データ処理部14は、1/5のレコードがRAM102に記憶されると、1/5のレコードの売上"200"と中間データMDT4（"530"）とを加算（符号AD4参照）した売上合計"730"を計算し、中間データMDT5としてRAM102に記憶する。そして、中間データ処理部14は、1/5のレコードをRAM102から削除する。ここで、ウィンドウW53(図11参照)が、1/1〜1/5のレコードに設定されているので、データ出力部15は、1/1の売上〜1/5の売上の売上合計"730"(符号MDT5参照)を出力する（符号OUT3参照）。
【０１５９】
次いで、中間データ処理部14は、1/6のレコードの売上"220"と中間データMDT5（"730"）とを加算（符号AD5参照）した売上合計"950"を計算し、中間データMDT6としてRAM102に記憶する。そして、中間データ処理部14は、1/6のレコードをRAM102から削除する。ここで、ウィンドウW54(図11参照)が、1/1〜1/6のレコードに設定されているので、データ出力部15は、1/1の売上〜1/6の売上の売上合計"950"(符号MDT6参照)を出力する（符号OUT4参照）。
【０１６０】
以上説明したように、ウィンドウ、すなわち処理対象となるデータ範囲が変わる度に、RAM102に記憶されたレコードにデータ処理を実行することなく、最新のレコードと中間データとを利用してデータ処理を実行して、処理結果を出力できる。
【０１６１】
すなわち、データ処理装置DPAは、無限回のウィンドウをレコードに設定すると、このレコードに基づきデータ処理を実行して中間データを生成したら、このレコードをRAM102から削除する。その結果、RAM102のメモリ領域からレコードを適宜削除できるので、RAM102のメモリ領域を有効利用できる。
【０１６２】
次に、メモリ領域の有効利用を考慮したデータ処理について、図11、図15を参照して説明する。このデータ処理は、月初日の売上と、基準レコードの2日前の売上とを出力するデータ処理である。基準レコードは、2日前の基準となる月日を含むレコードである。
【０１６３】
図15の点線の右矢印は、月日を示す。符号OUT11〜OUT14、符号OUT21〜OUT24で示す矢印は、中間データの出力を示す。
【０１６４】
符号BF1は、1日分の売上を記憶するバッファを示す。符号BF2は、3日分の売上を記憶するバッファを示す。バッファBF1は、出力対象の月初日の売上を記憶するバッファである。バッファBF2は、基準レコードの2日前の売上を記憶するバッファである。バッファBF2は、FIFO(First In, First Out)のキューである。中間データ処理部14は、バッファBF2の一番下の領域(図15の"基準"参照)に、基準レコードの売上を記憶する。中間データ処理部14は、バッファBF2の中央の領域(図15の"1日前"参照)に、基準レコードの1日前のレコードの売上を記憶する。中間データ処理部14は、バッファBF2の一番上の領域(図15の"2日前"参照)に、基準レコードの2日前のレコードの売上を記憶する。なお、バッファBF2内の"-"は、データが記憶されていないことを示す。
【０１６５】
中間データ処理部14は、第2のデータ処理の実行前に、RAM102にバッファBF1、BF2の領域を確保する。
【０１６６】
レコード入力部12は、1/1のレコード〜1/s(小文字sは1〜6までの整数)のレコードを順次入力し、RAM102に記憶する。ウィンドウ処理部13は、1/1のレコード〜1/sのレコードにウィンドウW5sを設定する（ウィンドウW5sについては、図11参照）。
【０１６７】
中間データ処理部14は、1/1のレコードがRAM102に記憶されると、1/1のレコードの売上"100"をバッファBF1に記憶する。そして、中間データ処理部14は、1/1のレコードの売上"100"をバッファBF2の一番下の領域に記憶する。そして、中間データ処理部14は、1/1のレコードをRAM102から削除する。
【０１６８】
中間データ処理部14は、1/2のレコードがRAM102に記憶されると、1/1のレコードの売上"100"をバッファBF2の中央の領域に記憶し、1/2のレコードの売上"200"をバッファBF2の一番下の領域に記憶する。ここで、1/2が基準日である。
【０１６９】
ウィンドウW51(図11参照)が、1/1、1/2のレコードに設定されているので、データ出力部15は、1/1の売上を出力し(符号OUT11)、基準日1/2の2日前のレコードの売上を出力する(符号OUT21)。なお、基準日1/2の2日前のレコードの売上は、未だRAM102に記憶されていないので、売上"0"を出力する。そして、中間データ処理部14は、1/2のレコードをRAM102から削除する。
【０１７０】
中間データ処理部14は、1/3のレコードがRAM102に記憶されると、1/1のレコードの売上"100"をバッファBF2の一番上の領域に記憶し、1/2のレコードの売上"200"をバッファBF2の中央の領域に記憶する。そして、中間データ処理部14は、1/3のレコードの売上"100"をバッファBF2の一番下の領域に記憶する。ここで、1/3が基準日である。
【０１７１】
ウィンドウW52(図11参照)が、1/1〜1/3のレコードに設定されているので、データ出力部15は、1/1の売上を出力し(符号OUT12)、基準日1/3の2日前のレコードの売上"100"を出力する(符号OUT22)。そして、中間データ処理部14は、1/3のレコードをRAM102から削除する。
【０１７２】
中間データ処理部14は、1/4のレコードがRAM102に記憶されると、1/2のレコードの売上"200"をバッファBF2の一番上の領域に記憶し、1/3のレコードの売上"100"をバッファBF2の中央の領域に記憶する。そして、中間データ処理部14は、1/4のレコードの売上"130"をバッファBF2の一番下の領域に記憶する。ここで、1/4が基準日である。
【０１７３】
中間データ処理部14は、1/5のレコードがRAM102に記憶されると、1/3のレコードの売上"100"をバッファBF2の一番上の領域に記憶し、1/4のレコードの売上"130"をバッファBF2の中央の領域に記憶する。そして、中間データ処理部14は、1/5のレコードの売上"200"をバッファBF2の一番下の領域に記憶する。ここで、1/5が基準日である。
【０１７４】
ウィンドウW53(図11参照)が、1/1〜1/5のレコードに設定されているので、データ出力部15は、1/1の売上を出力し(符号OUT13)、基準日1/5の2日前のレコードの売上"100"を出力する(符号OUT23)。そして、中間データ処理部14は、1/5のレコードをRAM102から削除する。
【０１７５】
中間データ処理部14は、1/6のレコードがRAM102に記憶されると、1/4のレコードの売上"130"をバッファBF2の一番上の領域に記憶し、1/5のレコードの売上"200"をバッファBF2の中央の領域に記憶する。そして、中間データ処理部14は、1/6のレコードの売上"220"をバッファBF2の一番下の領域に記憶する。ここで、1/6が基準日である。
【０１７６】
ウィンドウW54(図11参照)が、1/1〜1/6のレコードに設定されているので、データ出力部15は、1/1の売上を出力し(符号OUT14)、基準日1/6の2日前のレコードの売上"130"を出力する(符号OUT24)。そして、中間データ処理部14は、1/6のレコードをRAM102から削除する。
【０１７７】
図14、図15で説明したように、中間データ処理部14は、所定の処理の結果をRAM102に記憶し、記憶後、RAM102に記憶されたレコードをRAM102から削除する。中間データ処理部14は、レコードが入力される度に、RAM102に記憶された所定の処理の結果とレコードのデータとに対して所定の処理を実行する。
【０１７８】
図14、図15で説明したように、データ処理に必要なデータだけをRAM102に記憶し、データ処理に不要なレコードをRAM102から削除することで、RAM102のメモリ領域を有効利用できる。
【０１７９】
図8〜図15で説明したフラグについては、数値で例示したが、他にも、数値に対応する記号、文字としてもよい。例えば、フラグ"1"〜"26"を、それぞれ数値"1"〜"26"に対応する文字"A"〜"Z"としてもよい。
【０１８０】
[データ処理の流れ]
次に、図16〜図18を参照して、本実施の形態におけるデータ処理の流れを説明する。図16は、本実施の形態のデータ処理を説明する図である。入力レコードテーブルINDは、図4の加工装置MAが出力したレコード(入力レコード)を示すテーブルである。入力レコードテーブルINDにおいて、月日欄、売上欄、特殊欄、開始欄、終了欄は、それぞれ、入力レコードの月日、売上、特殊フラグ、開始フラグ、終了フラグを記憶する欄である。なお、特殊情報は、特殊フラグである。
【０１８１】
ウィンドウオープン数WON、ウィンドウクローズ数WCNは、データ処理の実行において設定されるウィンドウの数を管理する変数である。バッファBUFFは、処理対象となるデータ(例えば、売上)と、ウィンドウ開始数(開始フラグ)とを記憶する。
【０１８２】
ウィンドウ処理部13は、クエリがクエリ入力部11から入力されると、以下の処理を行う。すなわち、ウィンドウ処理部13は、RAM102のデータ処理領域RGに、ウィンドウオープン数WON、ウィンドウクローズ数WCNを記憶する領域を確保し、さらに、バッファBUFFの領域を確保する。なお、図中、図示の都合上、バッファBUFFにおけるウィンドウ開始数を"開始"と略記している。
【０１８３】
開始月日SMDは、中間データの開始月日を示す。終了月日EMDは、中間データの終了月日を示す。売上合計TMDは、売上合計を示す。
【０１８４】
中間データ処理部14は、クエリがクエリ入力部11から入力されると、以下の処理を行う。すなわち、中間データ処理部14は、RAM102のデータ処理領域RGに、開始月日SMD、終了月日EMD、売上合計TMDを記憶する領域を確保する。
【０１８５】
出力データテーブルOUTDは、図4の端末装置TAに出力するデータを示すテーブルである。なお、図16に示すように、ウィンドウオープン数WON、ウィンドウクローズ数WCN、バッファBUFF、開始月日SMD、終了月日EMD、売上合計TMDが、空であることを、"-"(ハイフン)で示している。ウィンドウオープン数WON、ウィンドウクローズ数WCN、売上合計TMDが空とは、ウィンドウオープン数WON、ウィンドウクローズ数WCN、売上合計TMDが0であることを意味する。
【０１８６】
(フロー図)
図17、図18は、本実施の形態のデータ処理装置が実行するデータ処理の流れを説明する第1、第2のフロー図である。クエリ入力部11は、既に、図4の端末装置TAから出力されたクエリを入力し、ウィンドウ処理部13、中間データ処理部14、データ出力部15に出力している。
【０１８７】
ステップS1:レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力したレコード(以下、入力レコードと適宜記す)をRAM102に一時的に記憶する。S1の後は、S2に移る。
【０１８８】
ステップS2:ウィンドウ処理部13は、入力レコードにウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれているか判定する。
【０１８９】
入力レコードにウィンドウリセット情報が含まれている場合(S2/YES)、S5に移る。入力レコードにウィンドウリセット情報が含まれていない場合(S2/NO)、S3に移る。
【０１９０】
ステップS3:ウィンドウ処理部13は、入力レコードのウィンドウ開始数が"0"でないか判定する。ウィンドウ開始数は、レコードの開始フラグである。ウィンドウ開始数が"0"でない場合(S3/YES)、S6に移る。ウィンドウ開始数が"0"の場合(S3/NO)、S4に移る。
【０１９１】
ステップS4:ウィンドウ処理部13は、ウィンドウオープン数WONが"0"でないか判定する。ウィンドウオープン数WONが"0"でない場合(S4/YES)、S9に移る。ウィンドウオープン数WONが"0"の場合(S4/NO)、S1に移る。
【０１９２】
ステップS5:ウィンドウ処理部13は、バッファBUFF、ウィンドウオープン数WON、ウィンドウクローズ数WCN、開始月日SMD、終了月日EMD、売上合計TMDをクリアする。このクリアにより、無限回のウィンドウの設定を停止する。S5の後は、S3に移る。
【０１９３】
ステップS6: ウィンドウ処理部13は、入力レコードのウィンドウ開始数(開始フラグ)が無限符号、または、ウィンドウオープン数WONが無限符号か判定する。
【０１９４】
入力レコードのウィンドウ開始数が無限符号の場合、または、ウィンドウオープン数WONが無限符号の場合(S6/YES)、S7に移る。前記したS6/YES以外の場合(S6/NO)、S8に移る。
【０１９５】
ステップS7: ウィンドウ処理部13は、ウィンドウオープン数WONを無限符号("-1")にセットする。S7の後は、S9に移る。
【０１９６】
ステップS8:ウィンドウ処理部13は、ウィンドウオープン数WONに入力レコードのウィンドウ開始数を加算する。S8の後は、S9に移る。
【０１９７】
ステップS9:中間データ処理部14は、入力されたクエリ(以下、クエリCと適宜記す)に従って、入力レコードと、現在の中間データとから、新たな中間データを生成する。S9の後は、S10に移る。
【０１９８】
ステップS10:ウィンドウ処理部13は、ウィンドウオープン数WONが無限符号でないか判定する。ウィンドウオープン数WONが無限符号の場合（S10/NO）、図18のS12に移る。ウィンドウオープン数WONが無限符号でない場合（S10/YES）、S11に移る。
【０１９９】
ステップS11:ウィンドウ処理部13は、入力レコードに含まれるデータの中で、中間データ更新に必要なデータと入力レコードのウィンドウ開始数とをバッファBUFFに追加する。中間データ更新に必要なデータは、例えば、クエリCに含まれるデータ処理の対象となるデータである。S11の後は、図18のS12に移る。
【０２００】
図18のステップS12:ウィンドウ処理部13は、入力レコードのウィンドウ終了数をウィンドウクローズ数WCNにセットする。ウィンドウ終了数は、レコードの終了フラグである。S12の後は、S13に移る。
【０２０１】
ステップS13: ウィンドウ処理部13は、ウィンドウクローズ数WCNが"0"ではなく、かつ、ウィンドウオープン数WONが"0"ではないか判定する。ウィンドウクローズ数WCNが"0"ではなく、かつ、ウィンドウオープン数WONが"0"ではない場合(S13/YES)、S14に移る。S13/YESでない場合(S13/NO)、図17のS1に移る。
【０２０２】
ステップS14: 中間データ処理部14は、RAM102の中間データ(開始月日SMD、終了月日EMD、売上合計TMD)から出力データを生成し、データ出力部15は、中間データ処理部14が生成した出力データを図4の端末装置TAに出力する。S14の後は、S15に移る。
【０２０３】
ステップS15:ウィンドウ処理部13は、ウィンドウクローズ数WCNが無限符号でないか判定する。ウィンドウクローズ数WCNが無限符号の場合（S15/NO）、S17に移る。ウィンドウクローズ数WCNが無限符号でない場合(S15/YES)、S16に移る。
【０２０４】
ステップS16:ウィンドウ処理部13は、ウィンドウクローズ数WCNを1個減算する。S16の後は、S17に移る。
【０２０５】
ステップS17:ウィンドウ処理部13は、ウィンドウオープン数WONが無限符号ではないか判定する。ウィンドウオープン数WONが無限符号の場合（S17/NO）、S19に移る。ウィンドウオープン数WONが無限符号でない場合(S17/YES)、S18に移る。
【０２０６】
ステップS18:ウィンドウ処理部13は、ウィンドウオープン数WONを1個減算する。S18の後は、S19に移る。
【０２０７】
ステップS19:ウィンドウ処理部13は、バッファBUFFが空でないか判定する。バッファBUFFが空の場合(S19/NO)、S13に移る。バッファBUFFが空でない場合(S19/YES)、S20に移る。
【０２０８】
ステップS20:ウィンドウ処理部13は、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数を1個減算する。S20の後は、S21に移る。
【０２０９】
ステップS21:ウィンドウ処理部13は、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"か判定する。バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"でない場合(S21/NO)、S13に移る。バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"の場合(S21/YES)、S22に移る。
【０２１０】
ステップS22:中間データ処理部14は、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する。S22の後は、S23に移る。
【０２１１】
ステップS23:中間データ処理部14は、バッファBUFFが空でないか判定する。バッファBUFFが空でない場合(S23/YES)、S21に移る。バッファBUFFが空の場合(S23/NO)、S13に移る。
【０２１２】
[具体例]
図19〜図43は、本実施の形態のデータ処理を具体的に説明する第1〜第25の図である。クエリ入力部11は、クエリを入力する。このクエリは、データ処理の範囲であるレコードの開始月日および終了月日と、データ処理の範囲内の売上の合計を出力するクエリである。以下、このクエリをクエリCと適宜記す。データ処理プログラムPG1は、クエリCに従って、入力レコードにデータ処理を実行する。クエリの入力後、レコード入力部12は、1個のレコードを入力する。
【０２１３】
(1月1日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/1"、売上"100"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"1"、ウィンドウ終了数(終了フラグ)"0"を含むレコードである。
【０２１４】
図19の入力レコードテーブルINDにおいて、1月1日の売上レコードを2行目に示す。具体的には、2行目の月日欄に"1/1"、売上欄に"100"、特殊欄に"0"、開始欄に"1"、終了欄に"0"が記憶される。
【０２１５】
なお、現時点では、図16に示すように、ウィンドウオープン数WON、ウィンドウクローズ数WCN、バッファBUFF、開始月日SMD、終了月日EMD、売上合計TMDは、空(クリア状態)である。
【０２１６】
1/1の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"1"である。そして、入力レコードのウィンドウ開始数が無限符号(例えば、"-1")、または、ウィンドウオープン数WONが無限符号ではない。従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でNOと判定する。そして、ウィンドウ処理部13は、ウィンドウオープン数WON"-"("0")に入力レコードのウィンドウ開始数"1"を加算して、図19に示すように、ウィンドウオープン数WONを"1"にする(S8)。
【０２１７】
図19を参照する。ウィンドウ処理部13は、クエリCに従って、1/1の入力レコードの月日"1/1"を開始月日SMDとしてRAM102に記憶し、入力レコードの月日"1/1"を終了月日EMDとしてRAM102に記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"100"を売上合計TMDとしてRAM102に記憶する(S9)。
【０２１８】
ウィンドウオープン数WONは"1"であり、無限符号でないので、ウィンドウ処理部13は、S10でYESと判定する。中間データ処理部14は、図19に示すように、1/1の入力レコードの売上"100"をバッファBUFFの売上欄に記憶し、入力レコードのウィンドウ開始数"1"をバッファBFFFの開始欄に記憶する(S11)。ウィンドウ処理部13は、入力レコードのウィンドウ終了数"0"をウィンドウクローズ数WCNにセットする(S12)。
【０２１９】
ウィンドウクローズ数WCNが"0"、ウィンドウオープン数WONが"1"なので、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。
【０２２０】
(1月2日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/2"、売上"200"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"1"、ウィンドウ終了数(終了フラグ)"1"を含むレコードである。
【０２２１】
図20の入力レコードテーブルINDにおいて、1月2日の売上レコードを3行目に示す。具体的には、3行目の月日欄に"1/2"、売上欄に"200"、特殊欄に"0"、開始欄に"1"、終了欄に"1"が記憶される。
【０２２２】
1/2の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"1"である。そして、入力レコードのウィンドウ開始数が無限符号(例えば、"-1")、または、ウィンドウオープン数WONが無限符号ではない。従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でNOと判定する。そして、ウィンドウ処理部13は、ウィンドウオープン数WON"1"(図19参照)に入力レコードのウィンドウ開始数"1"を加算して、図20に示すように、ウィンドウオープン数WONを"2"にする(S8)。
【０２２３】
図20を参照する。ウィンドウ処理部13は、クエリCに従って、1/2の入力レコードの月日"1/2"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/2"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"200"を現在の売上合計TMD"100"に加算して売上合計TMD"300"としてRAM102に記憶する(S9)。
【０２２４】
ウィンドウオープン数WONは"2"であり、無限符号でないので、ウィンドウ処理部13は、S10でYESと判定する。中間データ処理部14は、図20に示すように、1/2の入力レコードの売上"200"をバッファBUFFの売上欄に記憶し、入力レコードのウィンドウ開始数"1"をバッファBFFFの開始欄に記憶する(S11)。ウィンドウ処理部13は、入力レコードのウィンドウ終了数"1"をウィンドウクローズ数WCNにセットする(S12)。
【０２２５】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"2"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０２２６】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/1"、終了月日EMD"1/2"、売上合計TMD"300")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/1"を含み、終了月日"1/2"を含み、売上合計"300"を含む。この出力データを、図20の出力データテーブルOUTDにおいて、2行目に示す。具体的には、図20の出力データテーブルOUTDにおいて、2行目の開始月日欄に"1/1"、終了月日欄に"1/2"、売上合計欄に"300"が記憶される。
【０２２７】
以上説明したように、ウィンドウ処理部13は、1/1を開始月日SMDとしてRAM102に記憶することで、1/1のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/2を終了月日EMDとしてRAM102に記憶することで、1/2のレコードにウィンドウの終了点を設定する。そして、中間データ処理部14は、1/1のレコードの売上"100"と1/2のレコードの売上"200"との合計"300"を計算する。データ出力部15は、データ処理の開始"1/1"と終了"1/2"と、合計"300"とを出力する。
【０２２８】
図20において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図20参照)を1個減算し、図21に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０２２９】
そして、図20において、ウィンドウオープン数WONは"2"である。従って、ウィンドウ処理部13は、S17でYESと判定し、ウィンドウオープン数WON"1"(図20参照)を1個減算し、図21に示すように、ウィンドウオープン数WON"1"とする(S18)。
【０２３０】
そして、図20において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定し、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"1"(図20参照)を1個減算して、ウィンドウ開始数"0"(図21参照)とする(S20)。
【０２３１】
図21に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"である。従って、中間データ処理部14は、S21でYESと判定し、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する(S22)。
【０２３２】
具体的には、中間データ処理部14は、中間データの売上合計TMD"300"(図21参照)からバッファBUFFの先頭に記憶されたデータ(売上"100"、ウィンドウ開始数"0")の売上"100"(図21参照)を減算して、中間データの売上合計TMD"200"(図22参照)とする。
【０２３３】
次いで、中間データ処理部14は、中間データの開始月日SMDにおける先頭の開始月日"1/1"(図21参照)を削除して、開始月日"1/2"(図22参照)とする。
【０２３４】
次いで、中間データ処理部14は、バッファBUFFの先頭に記憶されたデータ(売上"100"、ウィンドウ開始数"0"(図21参照))を削除して、バッファBUFFを売上"200"、ウィンドウ開始数"1"と変更する(図22参照)。
【０２３５】
図22に示すように、バッファBUFFは、空ではない。従って、中間データ処理部14は、S23でYESと判定し、S21に移る。バッファBUFFにおいて先頭に記憶されたウィンドウ開始数は"1"である。従って、ウィンドウ処理部13は、S21でNOと判定し、S13に移る。
【０２３６】
図22に示すように、ウィンドウオープン数WONが"1"、ウィンドウクローズ数WCNが"0"なので、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/1のレコード)をRAM102から削除する。
【０２３７】
(1月3日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/3"、売上"100"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"1"、ウィンドウ終了数(終了フラグ)"-1"を含むレコードである。
【０２３８】
図23の入力レコードテーブルINDにおいて、1月3日の売上レコードを4行目に示す。具体的には、4行目の月日欄に"1/3"、売上欄に"100"、特殊欄に"0"、開始欄に"1"、終了欄に"-1"が記憶される。
【０２３９】
1/3の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"1"である。そして、入力レコードのウィンドウ開始数が無限符号(例えば、"-1")、または、ウィンドウオープン数WONが無限符号ではない(図22参照)。従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でNOと判定する。そして、ウィンドウ処理部13は、ウィンドウオープン数WON"1"(図22参照)に入力レコードのウィンドウ開始数"1"を加算して、図23に示すように、ウィンドウオープン数WONを"2"にする(S8)。
【０２４０】
図23を参照する。ウィンドウ処理部13は、クエリCに従って、1/3の入力レコードの開始月日"1/3"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/3"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"100"を現在の売上合計TMD"200"に加算して売上合計TMD"300"としてRAM102に記憶する(S9)。
【０２４１】
ウィンドウオープン数WONは"2"であり、無限符号でないので、ウィンドウ処理部13は、S10でYESと判定する。中間データ処理部14は、図23に示すように、1/3の入力レコードの売上"100"をバッファBUFFの売上欄に記憶し、入力レコードのウィンドウ開始数"1"をバッファBFFFの開始欄に記憶する(S11)。ウィンドウ処理部13は、図23に示すように、入力レコードのウィンドウ終了数"-1"をウィンドウクローズ数WCNにセットする(S12)。
【０２４２】
ウィンドウクローズ数WCNが"-1"、ウィンドウオープン数WONが"2"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０２４３】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/2"、"1/3"、終了月日EMD"1/3"、売上合計TMD"300")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/2"を含み、終了月日"1/3"を含み、売上合計"300"を含む。この出力データを、図23の出力データテーブルOUTDにおいて、3行目に示す。具体的には、図23の出力データテーブルOUTDにおいて、3行目の開始月日欄に"1/2"、終了月日欄に"1/3"、売上合計欄に"300"が記憶される。
【０２４４】
以上説明したように、ウィンドウ処理部13は、1/2を開始月日SMDとしてRAM102に記憶することで、1/2のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/3を終了月日EMDとしてRAM102に記憶することで、1/3のレコードにウィンドウの終了点を設定する。そして、中間データ処理部14は、1/2のレコードの売上"200"と1/3のレコードの売上"100"との合計"300"を計算する。データ出力部15は、データ処理の開始"1/2"と終了"1/3"と、合計"300"とを出力する。
【０２４５】
図23において、ウィンドウクローズ数WCNは"-1"である。従って、ウィンドウ処理部13は、S15でNOと判定し、S17に移る。
【０２４６】
そして、図23において、ウィンドウオープン数WONは"2"である。従って、ウィンドウ処理部13は、S17でYESと判定し、ウィンドウオープン数WON"2"(図23参照)を1個減算し、図24に示すように、ウィンドウオープン数WON"1"とする(S18)。
【０２４７】
そして、図23において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定し、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"1"(図23参照)を1個減算して、ウィンドウ開始数"0"(図24参照)とする(S20)。
【０２４８】
そして、図24に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"である。従って、中間データ処理部14は、S21でYESと判定し、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する(S22)。
【０２４９】
具体的には、中間データ処理部14は、中間データの売上合計TMD"300"(図24参照)からバッファBUFFの先頭に記憶されたデータ(売上"200"、ウィンドウ開始数"1")の売上"200"(図24参照)を減算して、中間データの売上合計TMD"100"(図25参照)とする。
【０２５０】
次いで、中間データ処理部14は、中間データの開始月日SMDにおける先頭の開始月日"1/2"(図24参照)を削除して、開始月日"1/3"(図25参照)とする。
【０２５１】
次いで、中間データ処理部14は、バッファBUFFの先頭に記憶されたデータ(売上"200"、ウィンドウ開始数"0"(図24参照))を削除して、バッファBUFFを売上"100"、ウィンドウ開始数"1"と変更する(図25参照)。
【０２５２】
図25に示すように、バッファBUFFは、空ではない。従って、中間データ処理部14は、S23でYESと判定し、S21に移る。バッファBUFFにおいて先頭に記憶されたウィンドウ開始数は"1"である。従って、ウィンドウ処理部13は、S21でNOと判定し、S13に移る。
【０２５３】
図25に示すように、ウィンドウクローズ数WCNが"-1"であり、かつ、ウィンドウオープン数WONが"1"である。すなわち、ウィンドウクローズ数WCNが"0"でなく、かつ、ウィンドウオープン数WONが"0"でない。従って、ウィンドウ処理部13は、S13でYESと判定する。
【０２５４】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/3"、終了月日EMD"1/3"、売上合計TMD"100")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/3"を含み、終了月日"1/3"を含み、売上合計"100"を含む。この出力データを、図25の出力データテーブルOUTDにおいて、4行目に示す。具体的には、図25の出力データテーブルOUTDにおいて、3行目の開始月日欄に"1/3"、終了月日欄に"1/3"、売上合計欄に"100"が記憶される。
【０２５５】
以上説明したように、1/3のレコードのウィンドウ終了数は、無限符号"-1"であり、1/3のレコードのウィンドウ開始数は、"1"である。従って、ウィンドウ処理部13は、1/3を開始月日SMDとしてRAM102に記憶することで、1/3のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/3を終了月日EMDとしてRAM102に記憶することで、1/3のレコードにウィンドウの終了点を設定する。そして、データ出力部15は、1/3のレコードの売上"100"を出力する。
【０２５６】
図25において、ウィンドウクローズ数WCNは"-1"である。すなわち、ウィンドウクローズ数WCNは無限符号である。従って、ウィンドウ処理部13は、S15でNOと判定し、S17に移る。図25において、ウィンドウオープン数WONは"1"である。従って、ウィンドウ処理部13は、S17でYESと判定し、図26に示すように、ウィンドウオープン数WON"1"(図25参照)を1個減算し、ウィンドウオープン数WON"0"とする(S18)。
【０２５７】
そして、図25において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定し、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"1"(図25参照)を1個減算して、ウィンドウ開始数"0"(図26参照)とする(S20)。
【０２５８】
そして、図26に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"である。従って、中間データ処理部14は、S21でYESと判定し、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する(S22)。
【０２５９】
具体的には、中間データ処理部14は、中間データの売上合計TMD"100"(図26参照)からバッファBUFFの先頭に記憶されたデータ(売上"100"、ウィンドウ開始数"0")の売上"100"(図26参照)を減算して、中間データの売上合計TMD"0"(図27参照)とする。
【０２６０】
次いで、中間データ処理部14は、図27に示すように、中間データの開始月日SMDにおける先頭の開始月日"1/3"(図26参照)を削除する。
【０２６１】
次いで、中間データ処理部14は、バッファBUFFの先頭に記憶されたデータ(売上"100"、ウィンドウ開始数"0"(図26参照))を削除して、バッファBUFFを空にする(図27参照)。
【０２６２】
図27に示すように、バッファBUFFは、空である。従って、中間データ処理部14は、S23でNOと判定し、S13に移る。ウィンドウオープン数WONが"0"(図27参照)なので、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/3のレコード)をRAM102から削除する。
【０２６３】
(1月4日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/4"、売上"130"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"2"、ウィンドウ終了数(終了フラグ)"1"を含むレコードである。
【０２６４】
図28の入力レコードテーブルINDにおいて、1月4日の売上レコードを5行目に示す。具体的には、5行目の月日欄に"1/4"、売上欄に"130"、特殊欄に"0"、開始欄に"2"、終了欄に"1"が記憶される。
【０２６５】
1/4の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"2"である。そして、入力レコードのウィンドウ開始数が無限符号(例えば、"-1")、または、ウィンドウオープン数WONが無限符号ではない(図27参照)。従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でNOと判定する。そして、ウィンドウ処理部13は、ウィンドウオープン数WON"0"(図27参照)に入力レコードのウィンドウ開始数"2"を加算して、図28に示すように、ウィンドウオープン数WONを"2"にする(S8)。
【０２６６】
図28を参照する。ウィンドウ処理部13は、クエリCに従って、1/4の入力レコードの開始月日"1/4"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/4"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"130"を現在の売上合計TMD"0"に加算して売上合計TMD"130"としてRAM102に記憶する(S9)。
【０２６７】
図28において、ウィンドウオープン数WONは"2"であり、無限符号でないので、ウィンドウ処理部13は、S10でYESと判定する。中間データ処理部14は、図28に示すように、1/4の入力レコードの売上"130"をバッファBUFFの売上欄に記憶し、入力レコードのウィンドウ開始数"2"をバッファBFFFの開始欄に記憶する(S11)。ウィンドウ処理部13は、図28に示すように、入力レコードのウィンドウ終了数"1"をウィンドウクローズ数WCNにセットする(S12)。
【０２６８】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"2"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０２６９】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/4"、終了月日EMD"1/4"、売上合計TMD"130")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/4"を含み、終了月日"1/4"を含み、売上合計"130"を含む。この出力データを、図28の出力データテーブルOUTDにおいて、4行目に示す。具体的には、図28の出力データテーブルOUTDにおいて、3行目の開始月日欄に"1/4"、終了月日欄に"1/4"、売上合計欄に"130"が記憶される。
【０２７０】
以上説明したように、1/4のレコードのウィンドウ開始数は、"2"であり、1/4のレコードのウィンドウ終了数は、"1"である。従って、ウィンドウ処理部13は、1/4を開始月日SMDとしてRAM102に記憶することで、1/4のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/4を終了月日EMDとしてRAM102に記憶することで、1/4のレコードにウィンドウの終了点を設定する。そして、データ出力部15は、1/4のレコードの売上"130"を出力する。
【０２７１】
図28において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図28参照)を1個減算し、図29に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０２７２】
そして、図28において、ウィンドウオープン数WONは"2"である。従って、ウィンドウ処理部13は、S17でYESと判定し、ウィンドウオープン数WON"2"(図28参照)を1個減算し、図29に示すように、ウィンドウオープン数WON"1"とする(S18)。
【０２７３】
そして、図28において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定し、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"2"(図28参照)を1個減算して、ウィンドウ開始数"1"(図29参照)とする(S20)。
【０２７４】
そして、図29に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"1"である。従って、中間データ処理部14は、S21でNOと判定する。
【０２７５】
ウィンドウクローズ数WCNが"0"なので、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/4のレコード)をRAM102から削除する。
【０２７６】
(1月5日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/5"、売上"200"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"2"、ウィンドウ終了数(終了フラグ)"2"を含むレコードである。
【０２７７】
図30の入力レコードテーブルINDにおいて、1月5日の売上レコードを6行目に示す。具体的には、6行目の月日欄に"1/5"、売上欄に"200"、特殊欄に"0"、開始欄に"2"、終了欄に"2"が記憶される。
【０２７８】
1/5の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"2"である。そして、入力レコードのウィンドウ開始数が無限符号(例えば、"-1")、または、ウィンドウオープン数WONが無限符号ではない(図29参照)。従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でNOと判定する。そして、ウィンドウ処理部13は、ウィンドウオープン数WON"1"(図29参照)に入力レコードのウィンドウ開始数"2"を加算して、図30に示すように、ウィンドウオープン数WONを"3"にする(S8)。
【０２７９】
図30を参照する。ウィンドウ処理部13は、クエリCに従って、1/5の入力レコードの開始月日"1/5"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/5"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"200"を現在の売上合計TMD"130"(図29参照)に加算して売上合計TMD"330"としてRAM102に記憶する(S9)。
【０２８０】
図30において、ウィンドウオープン数WONは"3"であり、無限符号でないので、ウィンドウ処理部13は、S10でYESと判定する。中間データ処理部14は、図30に示すように、1/5の入力レコードの売上"200"をバッファBUFFの売上欄に記憶し、入力レコードのウィンドウ開始数"2"をバッファBFFFの開始欄に記憶する(S11)。ウィンドウ処理部13は、図30に示すように、入力レコードのウィンドウ終了数"2"をウィンドウクローズ数WCNにセットする(S12)。
【０２８１】
ウィンドウクローズ数WCNが"2"、ウィンドウオープン数WONが"3"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０２８２】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/4"、"1/5"、終了月日EMD"1/5"、売上合計TMD"330")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/4"を含み、終了月日"1/5"を含み、売上合計"330"を含む。この出力データを、図30の出力データテーブルOUTDにおいて、6行目に示す。具体的には、図30の出力データテーブルOUTDにおいて、6行目の開始月日欄に"1/4"、終了月日欄に"1/5"、売上合計欄に"330"が記憶される。
【０２８３】
以上説明したように、1/4のレコードのウィンドウ開始数は、"2"であり、1/4のレコードのウィンドウ終了数は、"1"である。そして、1/5のレコードのウィンドウ開始数は、"2"であり、1/5のレコードのウィンドウ終了数は、"2"である。従って、ウィンドウ処理部13は、1/4を開始月日SMDとしてRAM102に記憶することで、1/4のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/5を終了月日EMDとしてRAM102に記憶することで、1/5のレコードにウィンドウの終了点を設定する。中間データ処理部14は、1/4のレコードの売上"130"と1/5のレコードの売上"200"との合計"330"を計算する。データ出力部15は、データ処理の開始"1/4"と終了"1/5"と、合計"330"とを出力する。
【０２８４】
図30において、ウィンドウクローズ数WCNは"2"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"2"(図30参照)を1個減算し、図31に示すように、ウィンドウクローズ数WCN"1"とする(S16)。
【０２８５】
そして、図30において、ウィンドウオープン数WONは"3"である。従って、ウィンドウ処理部13は、S17でYESと判定し、ウィンドウオープン数WON"3"(図30参照)を1個減算し、図31に示すように、ウィンドウオープン数WON"2"とする(S18)。
【０２８６】
そして、図30において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定する。そして、ウィンドウ処理部13は、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"1"(図30参照)を1個減算して、ウィンドウ開始数"0"(図31参照)とする(S20)。
【０２８７】
図31に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"である。従って、中間データ処理部14は、S21でYESと判定し、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する(S22)。
【０２８８】
具体的には、中間データ処理部14は、中間データの売上合計TMD"330"(図31参照)からバッファBUFFの先頭に記憶されたデータ(売上"130"、ウィンドウ開始数"0")の売上"130"(図31参照)を減算して、中間データの売上合計TMD"200"(図32参照)とする。
【０２８９】
次いで、中間データ処理部14は、中間データの開始月日SMDにおける先頭の開始月日"1/4"(図31参照)を削除して、開始月日"1/5"(図32参照)とする。
【０２９０】
次いで、中間データ処理部14は、バッファBUFFの先頭に記憶されたデータ(売上"130"、ウィンドウ開始数"0"(図31参照))を削除して、バッファBUFFを売上"200"、ウィンドウ開始数"2"と変更する(図32参照)。
【０２９１】
図32に示すように、バッファBUFFは、空ではない。従って、中間データ処理部14は、S23でYESと判定し、S21に移る。バッファBUFFにおいて先頭に記憶されたウィンドウ開始数は"2"である。従って、ウィンドウ処理部13は、S21でNOと判定し、S13に移る。
【０２９２】
図32に示すように、ウィンドウクローズ数WCNが"1"であり、かつ、ウィンドウオープン数WONが"2"である。すなわち、ウィンドウクローズ数WCNが"0"でなく、かつ、ウィンドウオープン数WONが"0"でない。従って、ウィンドウ処理部13は、S13でYESと判定する。
【０２９３】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/5"、終了月日EMD"1/5"、売上合計TMD"200")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/5"を含み、終了月日"1/5"を含み、売上合計"200"を含む。この出力データを、図32の出力データテーブルOUTDにおいて、7行目に示す。具体的には、図32の出力データテーブルOUTDにおいて、7行目の開始月日欄に"1/5"、終了月日欄に"1/5"、売上合計欄に"200"が記憶される。
【０２９４】
以上説明したように、1/5のレコードのウィンドウ開始数は、"2"であり、1/5のレコードのウィンドウ終了数は、"2"である。従って、ウィンドウ処理部13は、1/5を開始月日SMDとしてRAM102に記憶することで、1/5のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/5を終了月日EMDとしてRAM102に記憶することで、1/5のレコードにウィンドウの終了点を設定する。そして、データ出力部15は、1/5のレコードの売上"200"を出力する。
【０２９５】
図32において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図32参照)を1個減算し、図33に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０２９６】
図32において、ウィンドウオープン数WONは"2"である。従って、ウィンドウ処理部13は、S17でYESと判定し、図33に示すように、ウィンドウオープン数WON"2"(図32参照)を1個減算し、ウィンドウオープン数WON"1"とする(S18)。
【０２９７】
そして、図33において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定し、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"2"(図32参照)を1個減算して、ウィンドウ開始数"1"(図33参照)とする(S20)。
【０２９８】
そして、図33に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"1"である。従って、中間データ処理部14は、S21でNOと判定し、S13に移る。
【０２９９】
図33に示すように、ウィンドウクローズ数WCNが"0"なので、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/5のレコード)をRAM102から削除する。
【０３００】
(1月6日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/6"、売上"220"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"-1"、ウィンドウ終了数(終了フラグ)"1"を含むレコードである。
【０３０１】
図34の入力レコードテーブルINDにおいて、1月6日の売上レコードを7行目に示す。具体的には、7行目の月日欄に"1/6"、売上欄に"220"、特殊欄に"0"、開始欄に"-1"、終了欄に"1"が記憶される。
【０３０２】
1/6の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"-1"である。すなわち、入力レコードのウィンドウ開始数は無限符号である。
【０３０３】
従って、ウィンドウ処理部13は、S2でNO、S3でYES、S6でYESと判定する。そして、ウィンドウ処理部13は、図34に示すように、ウィンドウオープン数WONを無限符号("-1")にする(S7)。
【０３０４】
図34を参照する。ウィンドウ処理部13は、クエリCに従って、1/6の入力レコードの開始月日"1/6"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/6"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"220"を現在の売上合計TMD"200"(図33参照)に加算して売上合計TMD"420"としてRAM102に記憶する(S9)。
【０３０５】
図34において、ウィンドウオープン数WONは"-1"であり、無限符号である。従って、ウィンドウ処理部13は、S10でNOと判定し、S12に移る。ウィンドウ処理部13は、図34に示すように、入力レコードのウィンドウ終了数"1"をウィンドウクローズ数WCNにセットする(S12)。
【０３０６】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"-1"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０３０７】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/5"、"1/6"、終了月日EMD"1/6"、売上合計TMD"420")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/5"を含み、終了月日"1/6"を含み、売上合計"420"を含む。この出力データを、図34の出力データテーブルOUTDにおいて、8行目に示す。具体的には、図34の出力データテーブルOUTDにおいて、8行目の開始月日欄に"1/5"、終了月日欄に"1/6"、売上合計欄に"420"が記憶される。
【０３０８】
以上説明したように、1/5のレコードのウィンドウ開始数は、"2"であり、1/5のレコードのウィンドウ終了数は、"2"である。そして、1/6のレコードのウィンドウ終了数は、"1"である。従って、ウィンドウ処理部13は、1/5を開始月日SMDとしてRAM102に記憶することで、1/5のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/6を終了月日EMDとしてRAM102に記憶することで、1/6のレコードにウィンドウの終了点を設定する。中間データ処理部14は、1/5のレコードの売上"200"と1/6のレコードの売上"220"との合計"420"を計算する。データ出力部15は、データ処理の開始"1/5"と終了"1/6"と、合計"420"とを出力する。
【０３０９】
図34において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図34参照)を1個減算し、図35に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０３１０】
そして、図34において、ウィンドウオープン数WONは"-1"である。すなわち、ウィンドウオープン数WONは無限符号である。従って、ウィンドウ処理部13は、S17でNOと判定し、S19に移る。
【０３１１】
図34において、バッファBUFFは、空ではない。従って、ウィンドウ処理部13は、S19でYESと判定する。そして、ウィンドウ処理部13は、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数"1"(図34参照)を1個減算して、ウィンドウ開始数"0"(図35参照)とする(S20)。
【０３１２】
図35に示すように、バッファBUFFにおいて先頭に記憶されたウィンドウ開始数が"0"である。従って、中間データ処理部14は、S21でYESと判定し、バッファBUFFの先頭に記憶されたデータに基づいて、中間データを更新し、バッファBUFFの先頭に記憶されたデータをバッファBUFFから削除する(S22)。
【０３１３】
具体的には、中間データ処理部14は、中間データの売上合計TMD"420"(図35参照)からバッファBUFFの先頭に記憶されたデータ(売上"200"、ウィンドウ開始数"0")の売上"200"(図35参照)を減算して、中間データの売上合計TMD"220"(図36参照)とする。
【０３１４】
次いで、中間データ処理部14は、中間データの開始月日SMDにおける先頭の開始月日"1/5"(図35参照)を削除して、開始月日"1/6"(図36参照)とする。
【０３１５】
次いで、中間データ処理部14は、バッファBUFFの先頭に記憶されたデータ(売上"200"、ウィンドウ開始数"0"(図35参照))を削除して、バッファBUFFを空にする(図36参照)。
【０３１６】
図36に示すように、バッファBUFFは、空である。従って、中間データ処理部14は、S23でNOと判定し、S13に移る。
【０３１７】
そして、図36に示すように、ウィンドウクローズ数WCNは"0"である。従って、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/6のレコード)をRAM102から削除する。
【０３１８】
(1月7日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/7"、売上"150"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"0"、ウィンドウ終了数(終了フラグ)"1"を含むレコードである。
【０３１９】
図37の入力レコードテーブルINDにおいて、1月7日の売上レコードを8行目に示す。具体的には、8行目の月日欄に"1/7"、売上欄に"150"、特殊欄に"0"、開始欄に"0"、終了欄に"1"が記憶される。
【０３２０】
1/7の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"0"である。さらに、ウィンドウオープン数WONは、"-1"である。従って、ウィンドウ処理部13は、S2でNO、S3でNO、S4でYESと判定する。そして、S9に移る。
【０３２１】
図37を参照する。ウィンドウ処理部13は、クエリCに従って、1/7の入力レコードの開始月日"1/7"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/7"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"150"を現在の売上合計TMD"220"(図36参照)に加算して売上合計TMD"370"としてRAM102に記憶する(S9)。
【０３２２】
図37において、ウィンドウオープン数WONは"-1"であり、無限符号である。従って、ウィンドウ処理部13は、S10でNOと判定し、S12に移る。ウィンドウ処理部13は、図37に示すように、入力レコードのウィンドウ終了数"1"をウィンドウクローズ数WCNにセットする(S12)。
【０３２３】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"-1"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０３２４】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/6"、"1/7"、終了月日EMD"1/7"、売上合計TMD"370")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/6"を含み、終了月日"1/7"を含み、売上合計"370"を含む。この出力データを、図37の出力データテーブルOUTDにおいて、9行目に示す。具体的には、図37の出力データテーブルOUTDにおいて、9行目の開始月日欄に"1/6"、終了月日欄に"1/7"、売上合計欄に"370"が記憶される。
【０３２５】
以上説明したように、1/6のレコードのウィンドウ開始数は、"-1"(無限符号)であり、1/6のレコードのウィンドウ終了数は、"1"である。そして、1/7のレコードのウィンドウ終了数は、"1"である。従って、ウィンドウ処理部13は、1/6を開始月日SMDとしてRAM102に記憶することで、1/6のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/7を終了月日EMDとしてRAM102に記憶することで、1/7のレコードにウィンドウの終了点を設定する。中間データ処理部14は、1/6のレコードの売上"220"と1/7のレコードの売上"150"との合計"370"を計算する。データ出力部15は、データ処理の開始"1/6"と終了"1/7"と、合計"370"とを出力する。
【０３２６】
図37において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図37参照)を1個減算し、図38に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０３２７】
そして、図37において、ウィンドウオープン数WONは"-1"である。すなわち、ウィンドウオープン数WONは無限符号である。従って、ウィンドウ処理部13は、S17でNOと判定し、S19に移る。
【０３２８】
図38において、バッファBUFFは、空である。従って、ウィンドウ処理部13は、S19でNOと判定し、S13に移る。
【０３２９】
図38に示すように、ウィンドウクローズ数WCNは"0"である。従って、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/7のレコード)をRAM102から削除する。
【０３３０】
(1月8日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/8"、売上"220"、特殊フラグ"1"、ウィンドウ開始数(開始フラグ)"-1"、ウィンドウ終了数(終了フラグ)"1"を含むレコードである。
【０３３１】
図39の入力レコードテーブルINDにおいて、1月8日の売上レコードを9行目に示す。具体的には、9行目の月日欄に"1/8"、売上欄に"220"、特殊欄に"1"、開始欄に"-1"、終了欄に"1"が記憶される。
【０３３２】
1/8の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれている。従って、ウィンドウ処理部13は、図39に示すように、バッファBUFF、ウィンドウオープン数WON、ウィンドウクローズ数WCN、バッファBUFF、開始月日SMD、終了月日EMD、売上合計TMDをクリア(空)する(S5)。次いで、S3に移る。このクリアにより、無限回のウィンドウの設定を停止する。
【０３３３】
入力レコードのウィンドウ開始数は"-1"である。すなわち、入力レコードのウィンドウ開始数は無限符号である。
【０３３４】
従って、ウィンドウ処理部13は、S3でYES、S6でYESと判定する。そして、ウィンドウ処理部13は、図40に示すように、ウィンドウオープン数WONを無限符号("-1")にする(S7)。
【０３３５】
図40を参照する。ウィンドウ処理部13は、クエリCに従って、1/8の入力レコードの開始月日"1/8"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/8"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"220"を現在の売上合計TMD"0"(図39参照)に加算して売上合計TMD"220"としてRAM102に記憶する(S9)。
【０３３６】
図40において、ウィンドウオープン数WONは"-1"であり、無限符号である。従って、ウィンドウ処理部13は、S10でNOと判定し、S12に移る。ウィンドウ処理部13は、図40に示すように、入力レコードのウィンドウ終了数"1"をウィンドウクローズ数WCNにセットする(S12)。
【０３３７】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"-1"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０３３８】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/8"、終了月日EMD"1/8"、売上合計TMD"220")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/8"を含み、終了月日"1/8"を含み、売上合計"220"を含む。この出力データを、図40の出力データテーブルOUTDにおいて、10行目に示す。具体的には、図40の出力データテーブルOUTDにおいて、10行目の開始月日欄に"1/8"、終了月日欄に"1/8"、売上合計欄に"220"が記憶される。
【０３３９】
以上説明したように、1/8のレコードのウィンドウ開始数は、"-1"(無限符号)であり、1/8のレコードのウィンドウ終了数は、"1"である。従って、ウィンドウ処理部13は、1/8を開始月日SMDとしてRAM102に記憶することで、1/8のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/8を終了月日EMDとしてRAM102に記憶することで、1/8のレコードにウィンドウの終了点を設定する。データ出力部15は、データ処理の開始"1/8"と終了"1/8"と、合計"220"とを出力する。
【０３４０】
図40において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図40参照)を1個減算し、図41に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０３４１】
図40において、ウィンドウオープン数WONは"-1"である。すなわち、ウィンドウオープン数WONは無限符号である。従って、ウィンドウ処理部13は、S17でNOと判定し、S19に移る。
【０３４２】
図41において、バッファBUFFは、空である。従って、ウィンドウ処理部13は、S19でNOと判定する。
【０３４３】
図41において、ウィンドウクローズ数WCNは"0"である。従って、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/8のレコード)をRAM102から削除する。
【０３４４】
(1月9日のレコード)
レコード入力部12は、図4の加工装置MAから1個のレコードを入力し、入力レコードをRAM102に一時的に記憶する(S1)。入力レコードは、月日"1/9"、売上"180"、特殊フラグ"0"、ウィンドウ開始数(開始フラグ)"0"、ウィンドウ終了数"(終了フラグ)1"を含むレコードである。
【０３４５】
図42の入力レコードテーブルINDにおいて、1月9日の売上レコードを10行目に示す。具体的には、10行目の月日欄に"1/9"、売上欄に"180"、特殊欄に"0"、開始欄に"0"、終了欄に"1"が記憶される。1/9の入力レコードにはウィンドウリセット情報(すなわち、特殊フラグ"1")が含まれていない。そして、入力レコードのウィンドウ開始数は"0"である。そして、ウィンドウオープン数WONは、"-1"である。
【０３４６】
従って、ウィンドウ処理部13は、S2でNO、S3でNO、S4でYESと判定し、S9に移る。
【０３４７】
図42を参照する。ウィンドウ処理部13は、クエリCに従って、1/9の入力レコードの開始月日"1/9"を開始月日SMDとしてRAM102に追加記憶し、入力レコードの月日"1/9"を終了月日EMDとしてRAM102に上書き記憶する(S9)。そして、中間データ処理部14は、クエリCに従って、入力レコードの売上"180"を現在の売上合計TMD"220"(図41参照)に加算して売上合計TMD"400"としてRAM102に記憶する(S9)。
【０３４８】
図43において、ウィンドウオープン数WONは"-1"であり、無限符号である。従って、ウィンドウ処理部13は、S10でNOと判定し、S12に移る。ウィンドウ処理部13は、図43に示すように、入力レコードのウィンドウ終了数"0"をウィンドウクローズ数WCNにセットする(S12)。
【０３４９】
ウィンドウクローズ数WCNが"1"、ウィンドウオープン数WONが"-1"なので、ウィンドウ処理部13は、S13でYESと判定する。
【０３５０】
中間データ処理部14は、RAM102の中間データ(開始月日SMD"1/8"、"1/9"、終了月日EMD"1/9"、売上合計TMD"400")から出力データを生成し、データ出力部15は、出力データを端末装置TAに出力する(S14)。出力データは、開始月日"1/8"を含み、終了月日"1/9"を含み、売上合計"400"を含む。この出力データを、図42の出力データテーブルOUTDにおいて、11行目に示す。具体的には、図42の出力データテーブルOUTDにおいて、11行目の開始月日欄に"1/8"、終了月日欄に"1/9"、売上合計欄に"400"が記憶される。
【０３５１】
以上説明したように、1/8のレコードのウィンドウ開始数は、"-1"(無限符号)であり、1/9のレコードのウィンドウ開始数は、"0"、1/9のレコードのウィンドウ終了数は、"1"である。従って、ウィンドウ処理部13は、1/8を開始月日SMDとしてRAM102に記憶することで、1/8のレコードにウィンドウの開始点を設定する。ウィンドウ処理部13は、1/9を終了月日EMDとしてRAM102に記憶することで、1/9のレコードにウィンドウの終了点を設定する。中間データ処理部14は、1/8のレコードの売上"220"と1/9のレコードの売上"180"との合計"400"を計算する。データ出力部15は、データ処理の開始"1/8"と終了"1/9"と、合計"400"とを出力する。
【０３５２】
図42において、ウィンドウクローズ数WCNは"1"である。従って、ウィンドウ処理部13は、S15でYESと判定し、ウィンドウクローズ数WCN"1"(図42参照)を1個減算し、図43に示すように、ウィンドウクローズ数WCN"0"とする(S16)。
【０３５３】
図43において、ウィンドウオープン数WONは"-1"である。すなわち、ウィンドウオープン数WONは無限符号である。従って、ウィンドウ処理部13は、S17でNOと判定し、S19に移る。
【０３５４】
図43において、バッファBUFFは、空である。従って、ウィンドウ処理部13は、S19でNOと判定する。
【０３５５】
図43において、ウィンドウクローズ数WCNは"0"である。従って、ウィンドウ処理部13は、S13でNOと判定する。そして、レコードの入力処理(S1)に移る。レコード入力部12は、S1の処理を実行する前に、今回入力したレコード(1/9のレコード)をRAM102から削除する。以後、S1の処理が順次実行される。
【０３５６】
[変形例]
図44は、図4のデータ処理装置DPAの他のソフトウェアブロック図である。図44では、図6のソフトウェアブロック図に追加して、加工部10を追加している。なお、加工部は、許容部とも呼ばれる。加工部10は、図7で説明した加工プログラムPG2と同様の機能を有する。この加工部10により、データ処理装置DPAは、加工装置MAの機能を実現する。
【０３５７】
データ処理装置DPAが、加工部10の機能を有する場合、図4のデータ生成装置DGAは、レコードなどの各種データを加工装置MAに出力せずに、データ処理装置DPAに出力する。なお、この場合、データ処理装置DPAの通信装置104は、データ生成装置DGAとネットワーク(図示しない)を介して通信可能である。
【０３５８】
データ処理装置DPAの加工部10は、データ生成装置DGAから出力されたレコードを加工し、加工後のレコード(すなわち、ウィンドウ情報が埋め込まれたレコード)をレコード入力部12に出力する。レコード入力部12は、加工部10からレコードを入力する。
【０３５９】
以上の実施の形態をまとめると、次の付記のとおりである。
【０３６０】
（付記１）
対応する値が順に入力される複数の項目の各々について、第1のフラグの設定または第2のフラグの設定を行うことを許容し、
前記第1のフラグがN(Nは1以上の整数)番目に設定された項目に対応づけた値が入力され、かつ、前記第2のフラグがM(MはN以上の整数)番目に設定された項目に対応づけた値が入力されたことを検出すると、
前記第1のフラグがN番目に設定された項目に対応づけて入力された値〜前記第2のフラグがM番目に設定された項目に対応づけて入力された値までに対して所定の処理を実行し、
処理結果を出力する処理をN番目の項目から順に実行する、
ことを特徴とするデータ処理方法。
【０３６１】
（付記２）
前記第1のフラグは、前記所定の処理の対象となる項目の範囲の開始を示すフラグであって、前記第2のフラグは、前記第1のフラグに対応し、前記範囲の終了を示すフラグであって、
前記第1のフラグ、および、前記第2のフラグは、前記範囲の数を示す情報である、
ことを特徴とする付記1に記載のデータ処理方法。
【０３６２】
（付記３）
前記許容において、前記項目に前記第1のフラグおよび前記第2のフラグの設定を行うことを許容する
ことを特徴とする付記1に記載のデータ処理方法。
【０３６３】
（付記４）
前記第1のフラグまたは前記第2のフラグが設定された項目を順次入力し、
前記検出において、前記第1のフラグが設定された前記N番目の項目に、前記第1のフラグにより示される個数の、前記範囲の開始を示す開始点を設定し、前記N番目の項目以降に入力された項目であって、前記第2のフラグが設定された、前記個数の項目の各々に前記範囲の終了を示す終了点を設定し、
前記所定の処理の実行において、前記開始点が設定された項目に対応付けて入力された値〜前記終了点が設定された項目に対応付けて入力された値に対して前記所定の処理を実行する
ことを特徴とする付記2に記載のデータ処理方法。
【０３６４】
（付記５）
前記第1のフラグは、前記範囲の数が無限であることを示す情報であり、
前記検出において、前記第1のフラグが設定された前記N番目の項目に、無限の前記開始点を設定し、前記N番目の項目以降に入力された項目であって、前記第2のフラグが設定された複数の項目の各々に前記終了点を設定する
ことを特徴とする付記4に記載のデータ処理方法。
【０３６５】
（付記６）
前記許容において、前記項目について、前記終了点の設定の停止を示す第3のフラグの設定を行うことを許容し、
前記検出において、前記範囲の数が無限であることを示す情報である前記第1のフラグが設定された項目の入力を検出した後、前記第3のフラグが設定された項目の入力を検出すると、前記第3のフラグが設定された項目以降に入力された項目に前記終了点を設定する処理を停止する
ことを特徴とする付記4に記載のデータ処理方法。
【０３６６】
（付記７）
前記項目の入力において、入力した前記項目をメモリに記憶し、
前記所定の処理の実行において、前記所定の処理の結果を前記メモリに記憶し、前記メモリに記憶された前記項目を削除し、前記項目が入力される度に、前記メモリに記憶された前記所定の処理の結果と前記項目に対応づけて入力された値とに対して前記所定の処理を実行する
ことを特徴とする付記6に記載のデータ処理方法。
【０３６７】
（付記８）
前記情報は、数値、記号、文字の何れかである
ことを特徴とする付記2に記載のデータ処理方法。
【０３６８】
（付記９）
対応する値が順に入力される複数の項目を記憶する記憶装置と、
前記複数の項目の値に対して所定の処理を実行する処理装置とを有し、
前記処理装置は、第1のフラグがN(Nは1以上の整数)番目に設定された項目に対応づけた値が入力され、かつ、第2のフラグがM(MはN以上の整数)番目に設定された項目に対応づけた値が入力されたことを検出すると、前記第1のフラグがN番目に設定された項目に対応づけて入力された値〜前記第2のフラグがM番目に設定された項目に対応づけて入力された値までに対して所定の処理を実行し、処理結果を出力する処理をN番目の項目から順に実行する
ことを特徴とするデータ処理装置。
【０３６９】
（付記１０）
コンピュータに、
対応する値が順に入力される複数の項目の各々について、第1のフラグの設定または第2のフラグの設定を行うことを許容し、
前記第1のフラグがN(Nは1以上の整数)番目に設定された項目に対応づけた値が入力され、かつ、前記第2のフラグがM(MはN以上の整数)番目に設定された項目に対応づけた値が入力されたことを検出すると、
前記第1のフラグがN番目に設定された項目に対応づけて入力された値〜前記第2のフラグがM番目に設定された項目に対応づけて入力された値までに対して所定の処理を実行し、
処理結果を出力する処理をN番目の項目から順に実行する、
処理を実行させることを特徴とするデータ処理プログラム。
【０３７０】
（付記１１）
処理対象のデータと、前記処理対象の範囲を示す、第1のフラグ、第2のフラグの何れか1または全てを含む複数のレコードを順次入力し、
前記第1のフラグを含む第1のレコードの入力を検出し、前記第2のフラグを含む第2のレコードの入力を検出すると、
前記第1のレコードの処理対象のデータから前記第2のレコードの処理対象のデータまでに対して所定の処理を実行し、処理結果を出力する
ことを特徴とするデータ処理方法。
【０３７１】
（付記１２）
前記第1のフラグは、前記所定の処理の対象となるレコードの範囲の開始を示すフラグであって、前記第2のフラグは、前記第1のフラグに対応し、前記範囲の終了を示すフラグであって、
前記第1のフラグ、および、前記第2のフラグは、前記範囲の数を示す情報である、
ことを特徴とする付記11記載のデータ処理方法。
【０３７２】
（付記１３）
前記検出において、前記第1のフラグを含む第1のレコードに、前記第1のフラグにより示される個数の、前記範囲の開始を示す開始点を設定し、前記第2のフラグが設定された前記個数の第2のレコードの各々に前記範囲の終了を示す終了点を設定し、
前記所定の処理の実行において、前記開始点が設定された前記第1のレコードの処理対象のデータから前記終了点が設定された前記第2のレコードの処理対象のデータまでに対して所定の処理を実行する
ことを特徴とする付記12に記載のデータ処理方法。 
【０３７３】
（付記１４）
前記第1のフラグは、前記範囲の数が無限であることを示す情報であり、
前記検出において、前記第1のフラグが設定された前記第1のレコードに、無限の前記開始点を設定し、前記第2のフラグが設定された複数の前記第2のレコードの各々に前記終了点を設定する
ことを特徴とする付記13に記載のデータ処理方法。
【０３７４】
（付記１５）
前記レコードの入力において、前記終了点の設定の停止を示す第3のフラグを更に含むレコードを入力し、
前記検出において、前記範囲の数が無限であることを示す情報である前記第1のフラグが設定された第1のレコードの入力を検出した後、前記第3のフラグが設定されたレコードの入力を検出すると、前記第3のフラグが設定されたレコード以降に入力されたレコードに前記終了点を設定する処理を停止する
ことを特徴とする付記14に記載のデータ処理方法。
【０３７５】
（付記１６）
前記レコードの入力において、入力した前記レコードをメモリに記憶し、
前記所定の処理の実行において、前記所定の処理の結果を前記メモリに記憶し、前記メモリに記憶された当該レコードを削除し、前記レコードが入力される度に、前記メモリに記憶された前記所定の処理の結果と前記レコードの処理対象のデータとに対して前記所定の処理を実行する
ことを特徴とする付記15に記載のデータ処理方法。
【０３７６】
（付記１７）
処理対象のデータと、前記処理対象の範囲を示す、第1のフラグ、第2のフラグの何れか1または全てを含む複数のレコードを記憶する記憶装置と、
前記第1のフラグを含む第1のレコードの入力を検出し、前記第2のフラグを含む第2のレコードの入力を検出すると、前記第1のレコードの処理対象のデータから前記第2のレコードの処理対象のデータまでに対して所定の処理を実行し、処理結果を出力する処理装置とを有する
ことを特徴とするデータ処理装置。
【符号の説明】
【０３７７】
DGA…データ生成装置、MA…加工装置、DPA…データ処理装置、TA…端末装置、PG1…データ処理プログラム、10…加工部、11…クエリ入力部、12…レコード入力部、13…ウィンドウ処理部、14…中間データ処理部、15…データ出力部、101…CPU、102…RAM、103…ROM、104…通信装置、105…ストレージ装置、106…外部記憶媒体読み取り装置、201…CPU、202…RAM、203…ROM、204…通信装置、205…ストレージ装置、206…外部記憶媒体読み取り装置。
【図１】
0006589334.tif 000002
【図２】
0006589334.tif 000003
【図３】
0006589334.tif 000004
【図４】
0006589334.tif 000005
【図５】
0006589334.tif 000006
【図６】
0006589334.tif 000007
【図７】
0006589334.tif 000008
【図８】
0006589334.tif 000009
【図９】
0006589334.tif 000010
【図１０】
0006589334.tif 000011
【図１１】
0006589334.tif 000012
【図１２】
0006589334.tif 000013
【図１３】
0006589334.tif 000014
【図１４】
0006589334.tif 000015
【図１５】
0006589334.tif 000016
【図１６】
0006589334.tif 000017
【図１７】
0006589334.tif 000018
【図１８】
0006589334.tif 000019
【図１９】
0006589334.tif 000020
【図２０】
0006589334.tif 000021
【図２１】
0006589334.tif 000022
【図２２】
0006589334.tif 000023
【図２３】
0006589334.tif 000024
【図２４】
0006589334.tif 000025
【図２５】
0006589334.tif 000026
【図２６】
0006589334.tif 000027
【図２７】
0006589334.tif 000028
【図２８】
0006589334.tif 000029
【図２９】
0006589334.tif 000030
【図３０】
0006589334.tif 000031
【図３１】
0006589334.tif 000032
【図３２】
0006589334.tif 000033
【図３３】
0006589334.tif 000034
【図３４】
0006589334.tif 000035
【図３５】
0006589334.tif 000036
【図３６】
0006589334.tif 000037
【図３７】
0006589334.tif 000038
【図３８】
0006589334.tif 000039
【図３９】
0006589334.tif 000040
【図４０】
0006589334.tif 000041
【図４１】
0006589334.tif 000042
【図４２】
0006589334.tif 000043
【図４３】
0006589334.tif 000044
【図４４】
0006589334.tif 000045