Sybase IQ 12.7 User Manual

Page of 212
その他の
 OLAP の例 
90
 
Sybase IQ
このクエリの結果セットを次に示します。
ID
description
quantity
ship_date
sum quantity
---
-----------
--------
---------
------------
302
Crew Neck
60
2001-07-02
60
400
Cotton Cap
60
2001-05-26
60
400
Cotton Cap
48
2001-07-05
108
401
Wool cap
48
2001-06-02
48
401
Wool cap
60
2001-06-30
108
401
Wool cap
48
2001-07-09
156
500
Cloth Visor
48
2001-06-21
48
501
Plastic Visor
60
2001-05-03
 
60
501
Plastic Visor
48
2001-05-18
108
501
Plastic Visor
48
2001-05-25
 
156
501
Plastic Visor
60
2001-07-07
  216
601
Zipped Sweatshirt
60
2001-07-19
  60
700
Cotton Shorts
72
2001-05-18
72
700
Cotton Shorts
48
2001-05-31
120
この例では、
2 つのテーブルのジョインとクエリの WHERE 句を適用した後
に、
SUM ウィンドウ関数の計算が行われます。このクエリではインラインの
ウィンドウ指定を使用しており、このウィンドウ指定によって、ジョインから
の入力ローが次のように処理されています。
1
prod_id 属性の値に基づいて入力ローがパーティション ( グループ ) に分
けられます。
2
各パーティション内で、ローが
 ship_date 属性に基づいてソートされます。
3
パーティション内の各ローの
 quantity 属性について、SUM() 関数が評価さ
れます。その際に、ソート後の各パーティションの最初のローから現在の
ローまでを含む移動ウィンドウ
 ( 現在のローも含む ) が使用されます。詳
細については、
 を参照してください。
このクエリを別の方法で記述するには、関数の外でウィンドウを定義し、その
ウィンドウを関数呼び出しから参照します。この方法は、同じウィンドウに基
づくウィンドウ関数を複数指定する場合に便利です。このウィンドウ関数を使
用するクエリを、独立したウィンドウ句を使用する方法で記述すると次のよう
になります
 (cumulative というウィンドウを宣言しています )。
SELECT p.id, p.description, s.quantity, s.ship_date,
SUM(s.quantity) OVER(cumulative
ROWS BETWEEN UNBOUNDED PRECEDING
and CURRENT ROW
) AS cumulative qty
FROM sales_order_items s JOIN product p On (s.prod_id =
p.id)
WHERE s.ship_date BETWEEN ‘2005-07-01’ and ‘2005-08-31’
Window cumulative as (PARTITION BY s.prod_id ORDER BY
s.ship date)
ORDER BY p.id