<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>OpenText Analytics Database 26.2.x – Analytic query examples</title>
    <link>/en/data-analysis/sql-analytics/analytic-query-examples/</link>
    <description>Recent content in Analytic query examples on OpenText Analytics Database 26.2.x</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="/en/data-analysis/sql-analytics/analytic-query-examples/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Data-Analysis: Calculating a median value</title>
      <link>/en/data-analysis/sql-analytics/analytic-query-examples/calculating-median-value/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/data-analysis/sql-analytics/analytic-query-examples/calculating-median-value/</guid>
      <description>
        
        
        &lt;p&gt;A median is a numerical value that separates the higher half of a sample from the lower half. For example, you can retrieve the median of a finite list of numbers by arranging all observations from lowest value to highest value and then picking the middle one.&lt;/p&gt;
&lt;p&gt;If the number of observations is even, then there is no single middle value; the median is the mean (average) of the two middle values.&lt;/p&gt;
&lt;p&gt;The following example uses this table:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CREATE TABLE allsales(state VARCHAR(20), name VARCHAR(20), sales INT);
INSERT INTO allsales VALUES(&amp;#39;MA&amp;#39;, &amp;#39;A&amp;#39;, 60);
INSERT INTO allsales VALUES(&amp;#39;NY&amp;#39;, &amp;#39;B&amp;#39;, 20);
INSERT INTO allsales VALUES(&amp;#39;NY&amp;#39;, &amp;#39;C&amp;#39;, 15);
INSERT INTO allsales VALUES(&amp;#39;MA&amp;#39;, &amp;#39;D&amp;#39;, 20);
INSERT INTO allsales VALUES(&amp;#39;MA&amp;#39;, &amp;#39;E&amp;#39;, 50);
INSERT INTO allsales VALUES(&amp;#39;NY&amp;#39;, &amp;#39;F&amp;#39;, 40);
INSERT INTO allsales VALUES(&amp;#39;MA&amp;#39;, &amp;#39;G&amp;#39;, 10);
COMMIT;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can use the analytic function 
&lt;code&gt;&lt;a href=&#34;../../../../en/sql-reference/functions/analytic-functions/median-analytic/#&#34;&gt;MEDIAN&lt;/a&gt;&lt;/code&gt; to calculate the median of all sales in this table. In the following query, the function&#39;s &lt;code&gt;OVER&lt;/code&gt; clause is empty, so the query returns the same aggregated value for each row of the result set:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT name, sales, MEDIAN(sales) OVER() AS median FROM allsales;
 name | sales | median
------+-------+--------
 G    |    10 |     20
 C    |    15 |     20
 D    |    20 |     20
 B    |    20 |     20
 F    |    40 |     20
 E    |    50 |     20
 A    |    60 |     20
(7 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can modify this query to group sales by state and obtain the median for each one. To do so, include a window partition clause in the &lt;code&gt;OVER&lt;/code&gt; clause:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT state, name, sales, MEDIAN(sales) OVER(partition by state) AS median FROM allsales;
 state | name | sales | median
-------+------+-------+--------
 MA    | G    |    10 |     35
 MA    | D    |    20 |     35
 MA    | E    |    50 |     35
 MA    | A    |    60 |     35
 NY    | C    |    15 |     20
 NY    | B    |    20 |     20
 NY    | F    |    40 |     20
(7 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Data-Analysis: Getting price differential for two stocks</title>
      <link>/en/data-analysis/sql-analytics/analytic-query-examples/getting-price-differential-two-stocks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/data-analysis/sql-analytics/analytic-query-examples/getting-price-differential-two-stocks/</guid>
      <description>
        
        
        &lt;p&gt;The following subquery selects out two stocks of interest. The outer query uses the LAST_VALUE() and OVER() components of analytics, with IGNORE NULLS.&lt;/p&gt;
&lt;h2 id=&#34;schema&#34;&gt;Schema&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DROP TABLE Ticks CASCADE;


CREATE TABLE Ticks (ts TIMESTAMP, Stock varchar(10), Bid float);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:54&amp;#39;, &amp;#39;abc&amp;#39;, 10.12);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:58&amp;#39;, &amp;#39;abc&amp;#39;, 10.34);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:59&amp;#39;, &amp;#39;abc&amp;#39;, 10.75);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:15&amp;#39;, &amp;#39;abc&amp;#39;, 11.98);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:16&amp;#39;, &amp;#39;abc&amp;#39;);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:22&amp;#39;, &amp;#39;xyz&amp;#39;, 45.16);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:27&amp;#39;, &amp;#39;xyz&amp;#39;, 49.33);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:31:12&amp;#39;, &amp;#39;xyz&amp;#39;, 65.25);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:31:15&amp;#39;, &amp;#39;xyz&amp;#39;);

COMMIT;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;ticks-table&#34;&gt;Ticks table&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT * FROM ticks;
         ts          | stock |  bid
---------------------+-------+-------
 2011-07-12 10:23:59 | abc   | 10.75
 2011-07-12 10:25:22 | xyz   | 45.16
 2011-07-12 10:23:58 | abc   | 10.34
 2011-07-12 10:25:27 | xyz   | 49.33
 2011-07-12 10:23:54 | abc   | 10.12
 2011-07-12 10:31:15 | xyz   |
 2011-07-12 10:25:15 | abc   | 11.98
 2011-07-12 10:25:16 | abc   |
 2011-07-12 10:31:12 | xyz   | 65.25
(9 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;query&#34;&gt;Query&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; =&amp;gt; SELECT ts, stock, bid, last_value(price1 IGNORE NULLS)
   OVER(ORDER BY ts) - last_value(price2 IGNORE NULLS)
   OVER(ORDER BY ts)   as price_diff
 FROM
  (SELECT ts, stock, bid,
    CASE WHEN stock = &amp;#39;abc&amp;#39; THEN bid ELSE NULL END AS price1,
    CASE WHEN stock = &amp;#39;xyz&amp;#39; then bid ELSE NULL END AS price2
    FROM ticks
    WHERE stock IN (&amp;#39;abc&amp;#39;,&amp;#39;xyz&amp;#39;)
  ) v1
 ORDER BY ts;
         ts          | stock |  bid  | price_diff
---------------------+-------+-------+------------
 2011-07-12 10:23:54 | abc   | 10.12 |
 2011-07-12 10:23:58 | abc   | 10.34 |
 2011-07-12 10:23:59 | abc   | 10.75 |
 2011-07-12 10:25:15 | abc   | 11.98 |
 2011-07-12 10:25:16 | abc   |       |
 2011-07-12 10:25:22 | xyz   | 45.16 |     -33.18
 2011-07-12 10:25:27 | xyz   | 49.33 |     -37.35
 2011-07-12 10:31:12 | xyz   | 65.25 |     -53.27
 2011-07-12 10:31:15 | xyz   |       |     -53.27
(9 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
    <item>
      <title>Data-Analysis: Calculating the moving average</title>
      <link>/en/data-analysis/sql-analytics/analytic-query-examples/calculating-moving-average/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/data-analysis/sql-analytics/analytic-query-examples/calculating-moving-average/</guid>
      <description>
        
        
        &lt;p&gt;Calculating the moving average is useful to get an estimate about the trends in a data set. The moving average is the average of any subset of numbers over a period of time. For example, if you have retail data that spans over ten years, you could calculate a three year moving average, a four year moving average, and so on. This example calculates a 40-second moving average of bids for one stock. This examples uses the 
&lt;code&gt;&lt;a href=&#34;../../../../en/data-analysis/sql-analytics/analytic-query-examples/getting-price-differential-two-stocks/#&#34;&gt;ticks&lt;/a&gt;&lt;/code&gt; table schema.&lt;/p&gt;
&lt;h2 id=&#34;query&#34;&gt;Query&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT ts, bid, AVG(bid)
   OVER(ORDER BY ts
       RANGE BETWEEN INTERVAL &amp;#39;40 seconds&amp;#39;
       PRECEDING AND CURRENT ROW)
FROM ticks
WHERE stock = &amp;#39;abc&amp;#39;
GROUP BY bid, ts
ORDER BY ts;
         ts          |  bid  |     ?column?
---------------------+-------+------------------
 2011-07-12 10:23:54 | 10.12 |            10.12
 2011-07-12 10:23:58 | 10.34 |            10.23
 2011-07-12 10:23:59 | 10.75 | 10.4033333333333
 2011-07-12 10:25:15 | 11.98 |            11.98
 2011-07-12 10:25:16 |       |            11.98
(5 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DROP TABLE Ticks CASCADE;


CREATE TABLE Ticks (ts TIMESTAMP, Stock varchar(10), Bid float);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:54&amp;#39;, &amp;#39;abc&amp;#39;, 10.12);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:58&amp;#39;, &amp;#39;abc&amp;#39;, 10.34);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:23:59&amp;#39;, &amp;#39;abc&amp;#39;, 10.75);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:15&amp;#39;, &amp;#39;abc&amp;#39;, 11.98);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:16&amp;#39;, &amp;#39;abc&amp;#39;);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:22&amp;#39;, &amp;#39;xyz&amp;#39;, 45.16);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:25:27&amp;#39;, &amp;#39;xyz&amp;#39;, 49.33);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:31:12&amp;#39;, &amp;#39;xyz&amp;#39;, 65.25);
INSERT INTO Ticks VALUES(&amp;#39;2011-07-12 10:31:15&amp;#39;, &amp;#39;xyz&amp;#39;);

COMMIT;
&lt;/code&gt;&lt;/pre&gt;

      </description>
    </item>
    
    <item>
      <title>Data-Analysis: Getting latest bid and ask results</title>
      <link>/en/data-analysis/sql-analytics/analytic-query-examples/getting-newest-bid-and-ask-results/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/data-analysis/sql-analytics/analytic-query-examples/getting-newest-bid-and-ask-results/</guid>
      <description>
        
        
        &lt;p&gt;The following query fills in missing NULL values to create a full book order showing latest bid and ask price and size, by vendor id. Original rows have values for (typically) one price and one size, so use last_value with &amp;quot;ignore nulls&amp;quot; to find the most recent non-null value for the other pair each time there is an entry for the ID. Sequenceno provides a unique total ordering.&lt;/p&gt;
&lt;h2 id=&#34;schema&#34;&gt;Schema:&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; CREATE TABLE bookorders(
    vendorid VARCHAR(100),
    date TIMESTAMP,
    sequenceno INT,
    askprice FLOAT,
    asksize INT,
    bidprice FLOAT,
    bidsize INT);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;3325XPK&amp;#39;,&amp;#39;2011-07-12 10:23:54&amp;#39;, 1, 10.12, 55, 10.23, 59);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;3345XPZ&amp;#39;,&amp;#39;2011-07-12 10:23:55&amp;#39;, 2, 10.55, 58, 10.75, 57);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;445XPKF&amp;#39;,&amp;#39;2011-07-12 10:23:56&amp;#39;, 3, 10.22, 43, 54);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;445XPKF&amp;#39;,&amp;#39;2011-07-12 10:23:57&amp;#39;, 3, 10.22, 59, 10.25, 61);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;3425XPY&amp;#39;,&amp;#39;2011-07-12 10:23:58&amp;#39;, 4, 11.87, 66, 11.90, 66);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;3727XVK&amp;#39;,&amp;#39;2011-07-12 10:23:59&amp;#39;, 5, 11.66, 51, 11.67, 62);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;5325XYZ&amp;#39;,&amp;#39;2011-07-12 10:24:01&amp;#39;, 6, 15.05, 44, 15.10, 59);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;3675XVS&amp;#39;,&amp;#39;2011-07-12 10:24:05&amp;#39;, 7, 15.43, 47, 58);
=&amp;gt; INSERT INTO bookorders VALUES(&amp;#39;8972VUG&amp;#39;,&amp;#39;2011-07-12 10:25:15&amp;#39;, 8, 14.95, 52, 15.11, 57);
COMMIT;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;query&#34;&gt;Query:&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=&amp;gt; SELECT
    sequenceno Seq,
    date &amp;#34;Time&amp;#34;,
    vendorid ID,
    LAST_VALUE (bidprice IGNORE NULLS)
     OVER (PARTITION BY vendorid ORDER BY sequenceno
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    AS &amp;#34;Bid Price&amp;#34;,
    LAST_VALUE (bidsize IGNORE NULLS)
     OVER (PARTITION BY vendorid ORDER BY sequenceno
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    AS &amp;#34;Bid Size&amp;#34;,
    LAST_VALUE (askprice IGNORE NULLS)
     OVER (PARTITION BY vendorid ORDER BY sequenceno
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    AS &amp;#34;Ask Price&amp;#34;,
    LAST_VALUE (asksize IGNORE NULLS)
     OVER (PARTITION BY vendorid order by sequenceno
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
    AS  &amp;#34;Ask Size&amp;#34;
 FROM bookorders
ORDER BY sequenceno;
 Seq |        Time         |   ID    | Bid Price | Bid Size | Ask Price | Ask Size
-----+---------------------+---------+-----------+----------+-----------+----------
   1 | 2011-07-12 10:23:54 | 3325XPK |     10.23 |       59 |     10.12 |       55
   2 | 2011-07-12 10:23:55 | 3345XPZ |     10.75 |       57 |     10.55 |       58
   3 | 2011-07-12 10:23:57 | 445XPKF |     10.25 |       61 |     10.22 |       59
   3 | 2011-07-12 10:23:56 | 445XPKF |        54 |          |     10.22 |       43
   4 | 2011-07-12 10:23:58 | 3425XPY |      11.9 |       66 |     11.87 |       66
   5 | 2011-07-12 10:23:59 | 3727XVK |     11.67 |       62 |     11.66 |       51
   6 | 2011-07-12 10:24:01 | 5325XYZ |      15.1 |       59 |     15.05 |       44
   7 | 2011-07-12 10:24:05 | 3675XVS |        58 |          |     15.43 |       47
   8 | 2011-07-12 10:25:15 | 8972VUG |     15.11 |       57 |     14.95 |       52
(9 rows)
&lt;/code&gt;&lt;/pre&gt;
      </description>
    </item>
    
  </channel>
</rss>
