<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FAnalytical_Functions%2FOver</id>
		<title>Oracle PL/SQL/Analytical Functions/Over - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=Oracle_PL%2FSQL%2FAnalytical_Functions%2FOver"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Analytical_Functions/Over&amp;action=history"/>
		<updated>2026-04-03T23:14:51Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Analytical_Functions/Over&amp;diff=1392&amp;oldid=prev</id>
		<title> в 13:45, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Analytical_Functions/Over&amp;diff=1392&amp;oldid=prev"/>
				<updated>2010-05-26T13:45:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:45, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=Oracle_PL/SQL/Analytical_Functions/Over&amp;diff=1393&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=Oracle_PL/SQL/Analytical_Functions/Over&amp;diff=1393&amp;oldid=prev"/>
				<updated>2010-05-26T09:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Get Products: RANK() OVER in subquery==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE Product (&lt;br /&gt;
  2  ProductID INT NOT NULL PRIMARY KEY,&lt;br /&gt;
  3  Name VARCHAR(50) NOT NULL,&lt;br /&gt;
  4  Description VARCHAR(1000) NOT NULL,&lt;br /&gt;
  5  Price NUMBER NULL,&lt;br /&gt;
  6  ImagePath VARCHAR(50) NULL,&lt;br /&gt;
  7  soldout NUMBER(1,0) NULL,&lt;br /&gt;
  8  Promotion NUMBER(1,0) NULL);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE SEQUENCE ProductIDSeq;&lt;br /&gt;
Sequence created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER ProductAutonumberTrigger&lt;br /&gt;
  2  BEFORE INSERT ON Product&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5     SELECT ProductIDSeq.NEXTVAL&lt;br /&gt;
  6     INTO :NEW.ProductID FROM DUAL;&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath,soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;Pen&amp;quot;, &amp;quot;Ball Pen&amp;quot;,5.99, &amp;quot;pen.jpg&amp;quot;, 1, 0);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath, soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;Ruler&amp;quot;, &amp;quot;Long&amp;quot;,14.99, &amp;quot;ruler.jpg&amp;quot;, 0, 0);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath, soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;Desk&amp;quot;, &amp;quot;Computer Desk&amp;quot;,5.99, &amp;quot;desk.jpg&amp;quot;, 0, 1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath, soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;PC&amp;quot;, &amp;quot;Notebook&amp;quot;,49.99, &amp;quot;pc.jpg&amp;quot;, 0, 1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath, soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;Mouse&amp;quot;, &amp;quot;Wireless&amp;quot;,9.99, &amp;quot;mouse.jpg&amp;quot;,  1, 0);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO Product (Name, Description, Price, ImagePath, soldout, Promotion)&lt;br /&gt;
  2  VALUES (&amp;quot;Keyboard&amp;quot;, &amp;quot;keyboard&amp;quot;,3.75, &amp;quot;keyboard.jpg&amp;quot;, 0, 0);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE ProductCategory (&lt;br /&gt;
  2  ProductID INT NOT NULL,&lt;br /&gt;
  3  CategoryID INT NOT NULL,&lt;br /&gt;
  4  PRIMARY KEY (ProductID, CategoryID)&lt;br /&gt;
  5  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (1,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (2,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (2,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (3,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (4,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (5,2);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (6,3);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (6,4);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (7,4);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO ProductCategory (ProductID, CategoryID) VALUES (8,5);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE Category (&lt;br /&gt;
  2  CategoryID INT NOT NULL PRIMARY KEY,&lt;br /&gt;
  3  DepartmentID INT NOT NULL,&lt;br /&gt;
  4  Name VARCHAR(50) NOT NULL,&lt;br /&gt;
  5  Description VARCHAR (200) NULL);&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE SEQUENCE CategoryIDSeq;&lt;br /&gt;
Sequence created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE OR REPLACE TRIGGER CategoryAutonumberTrigger&lt;br /&gt;
  2  BEFORE INSERT ON Category&lt;br /&gt;
  3  FOR EACH ROW&lt;br /&gt;
  4  BEGIN&lt;br /&gt;
  5     SELECT CategoryIDSeq.NEXTVAL&lt;br /&gt;
  6     INTO :NEW.CategoryID FROM DUAL;&lt;br /&gt;
  7  END;&lt;br /&gt;
  8  /&lt;br /&gt;
Trigger created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO Category (DepartmentID, Name, Description) VALUES (1, &amp;quot;Local&amp;quot;, &amp;quot;In town&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO Category (DepartmentID, Name, Description) VALUES (1, &amp;quot;Remote&amp;quot;, &amp;quot;Telecommute&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO Category (DepartmentID, Name, Description) VALUES (2, &amp;quot;Masks&amp;quot;, &amp;quot;By bits&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO Category (DepartmentID, Name, Description) VALUES (3, &amp;quot;Wireless&amp;quot;, &amp;quot;Not connected&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO Category (DepartmentID, Name, Description) VALUES (3, &amp;quot;Wired&amp;quot;, &amp;quot;Connected&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT CategoryName, ProductName, ProductPrice&lt;br /&gt;
  2    FROM&lt;br /&gt;
  3      (SELECT C.Name as CategoryName,&lt;br /&gt;
  4              P.Name as ProductName,&lt;br /&gt;
  5              P.Price as ProductPrice,&lt;br /&gt;
  6              RANK() OVER (PARTITION BY C.Name ORDER BY P.Price DESC)&lt;br /&gt;
  7              AS rank&lt;br /&gt;
  8       FROM Product P&lt;br /&gt;
  9       JOIN ProductCategory PC ON P.ProductID = PC.ProductID&lt;br /&gt;
 10       JOIN Category C ON C.CategoryID = PC.CategoryID)&lt;br /&gt;
 11  WHERE rank &amp;lt;= 2&lt;br /&gt;
 12  ORDER BY CategoryName;&lt;br /&gt;
CATEGORYNAME&lt;br /&gt;
--------------------------------------------------&lt;br /&gt;
PRODUCTNAME                                        PRODUCTPRICE&lt;br /&gt;
-------------------------------------------------- ------------&lt;br /&gt;
Local&lt;br /&gt;
PC                                                        49.99&lt;br /&gt;
Local&lt;br /&gt;
Ruler                                                     14.99&lt;br /&gt;
Masks&lt;br /&gt;
Ruler                                                     14.99&lt;br /&gt;
Masks&lt;br /&gt;
Pen                                                        5.99&lt;br /&gt;
Masks&lt;br /&gt;
Desk                                                       5.99&lt;br /&gt;
Remote&lt;br /&gt;
Mouse                                                      9.99&lt;br /&gt;
Wireless&lt;br /&gt;
Keyboard                                                   3.75&lt;br /&gt;
&lt;br /&gt;
7 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table Product;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table ProductCategory;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop table Category;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt; drop sequence CategoryIDSeq;&lt;br /&gt;
Sequence dropped.&lt;br /&gt;
SQL&amp;gt; drop sequence ProductIDSeq;&lt;br /&gt;
Sequence dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Include a final ordering of the result set with an ORDER BY at the end of the query==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- create demo table&lt;br /&gt;
SQL&amp;gt; create table Employee(&lt;br /&gt;
  2    ID                 VARCHAR2(4 BYTE)         NOT NULL,&lt;br /&gt;
  3    First_Name         VARCHAR2(10 BYTE),&lt;br /&gt;
  4    Last_Name          VARCHAR2(10 BYTE),&lt;br /&gt;
  5    Start_Date         DATE,&lt;br /&gt;
  6    End_Date           DATE,&lt;br /&gt;
  7    Salary             Number(8,2),&lt;br /&gt;
  8    City               VARCHAR2(10 BYTE),&lt;br /&gt;
  9    Description        VARCHAR2(15 BYTE)&lt;br /&gt;
 10  )&lt;br /&gt;
 11  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- prepare data&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2               values (&amp;quot;01&amp;quot;,&amp;quot;Jason&amp;quot;,    &amp;quot;Martin&amp;quot;,  to_date(&amp;quot;19960725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20060725&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 1234.56, &amp;quot;Toronto&amp;quot;,  &amp;quot;Programmer&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;02&amp;quot;,&amp;quot;Alison&amp;quot;,   &amp;quot;Mathews&amp;quot;, to_date(&amp;quot;19760321&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19860221&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;03&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Smith&amp;quot;,   to_date(&amp;quot;19781212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19900315&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;04&amp;quot;,&amp;quot;Celia&amp;quot;,    &amp;quot;Rice&amp;quot;,    to_date(&amp;quot;19821024&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19990421&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)&lt;br /&gt;
  2                values(&amp;quot;05&amp;quot;,&amp;quot;Robert&amp;quot;,   &amp;quot;Black&amp;quot;,   to_date(&amp;quot;19840115&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980808&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78, &amp;quot;Vancouver&amp;quot;,&amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;06&amp;quot;,&amp;quot;Linda&amp;quot;,    &amp;quot;Green&amp;quot;,   to_date(&amp;quot;19870730&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19960104&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78,&amp;quot;New York&amp;quot;,  &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;07&amp;quot;,&amp;quot;David&amp;quot;,    &amp;quot;Larry&amp;quot;,   to_date(&amp;quot;19901231&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;19980212&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78,&amp;quot;New York&amp;quot;,  &amp;quot;Manager&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)&lt;br /&gt;
  2                values(&amp;quot;08&amp;quot;,&amp;quot;James&amp;quot;,    &amp;quot;Cat&amp;quot;,     to_date(&amp;quot;19960917&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), to_date(&amp;quot;20020415&amp;quot;,&amp;quot;YYYYMMDD&amp;quot;), 2334.78,&amp;quot;Vancouver&amp;quot;, &amp;quot;Tester&amp;quot;)&lt;br /&gt;
  3  /&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- display data in the table&lt;br /&gt;
SQL&amp;gt; select * from Employee&lt;br /&gt;
  2  /&lt;br /&gt;
ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION&lt;br /&gt;
---- ---------- ---------- --------- --------- ---------- ---------- ---------------&lt;br /&gt;
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer&lt;br /&gt;
02   Alison     Mathews    21-MAR-76 21-FEB-86    2334.78 Vancouver  Tester&lt;br /&gt;
03   James      Smith      12-DEC-78 15-MAR-90    2334.78 Vancouver  Tester&lt;br /&gt;
04   Celia      Rice       24-OCT-82 21-APR-99    2334.78 Vancouver  Manager&lt;br /&gt;
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester&lt;br /&gt;
06   Linda      Green      30-JUL-87 04-JAN-96    2334.78 New York   Tester&lt;br /&gt;
07   David      Larry      31-DEC-90 12-FEB-98    2334.78 New York   Manager&lt;br /&gt;
08   James      Cat        17-SEP-96 15-APR-02    2334.78 Vancouver  Tester&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- include a final ordering of the result set with an ORDER BY at the end of the query&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT id, first_name, salary, ROW_NUMBER() OVER(ORDER BY salary desc) toprank&lt;br /&gt;
  2  FROM employee&lt;br /&gt;
  3  ORDER BY salary desc;&lt;br /&gt;
ID   FIRST_NAME     SALARY    TOPRANK&lt;br /&gt;
---- ---------- ---------- ----------&lt;br /&gt;
04   Celia         2334.78          1&lt;br /&gt;
02   Alison        2334.78          2&lt;br /&gt;
03   James         2334.78          3&lt;br /&gt;
08   James         2334.78          4&lt;br /&gt;
05   Robert        2334.78          5&lt;br /&gt;
06   Linda         2334.78          6&lt;br /&gt;
07   David         2334.78          7&lt;br /&gt;
01   Jason         1234.56          8&lt;br /&gt;
8 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; -- clean the table&lt;br /&gt;
SQL&amp;gt; drop table Employee;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lag salary over, lead salary over==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; create table history&lt;br /&gt;
  2  ( empno      NUMBER(4)&lt;br /&gt;
  3  , beginyear  NUMBER(4)&lt;br /&gt;
  4  , begindate  DATE&lt;br /&gt;
  5  , enddate    DATE&lt;br /&gt;
  6  , deptno     NUMBER(2)&lt;br /&gt;
  7  , sal        NUMBER(6,2)&lt;br /&gt;
  8  , comments   VARCHAR2(60)&lt;br /&gt;
  9  , constraint H_PK         primary key          (empno,begindate)&lt;br /&gt;
 10  , constraint H_BEG_END    check                (begindate &amp;lt; enddate)&lt;br /&gt;
 11  ) ;&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; alter session  set NLS_DATE_FORMAT=&amp;quot;DD-MM-YYYY&amp;quot;;&lt;br /&gt;
Session altered.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; insert into history values (1,2000,&amp;quot;01-01-2000&amp;quot;,&amp;quot;01-02-2000&amp;quot;,40, 950,&amp;quot;&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into history values (1,2000,&amp;quot;01-02-2000&amp;quot;, NULL       ,20, 800,&amp;quot;restarted&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; insert into history values (2,2009,&amp;quot;01-11-2009&amp;quot;, NULL       ,30,1600,&amp;quot;just hired&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select empno, begindate, sal&lt;br /&gt;
  2  ,      LAG(sal) over&lt;br /&gt;
  3         ( partition by empno&lt;br /&gt;
  4           order by empno, begindate&lt;br /&gt;
  5         ) as prev_sal&lt;br /&gt;
  6  ,      LEAD(sal) over&lt;br /&gt;
  7         ( partition by empno&lt;br /&gt;
  8           order by empno, begindate&lt;br /&gt;
  9         ) as next_sal&lt;br /&gt;
 10  from   history&lt;br /&gt;
 11  order  by empno, begindate;&lt;br /&gt;
     EMPNO BEGINDATE         SAL   PREV_SAL   NEXT_SAL&lt;br /&gt;
---------- ---------- ---------- ---------- ----------&lt;br /&gt;
         1 01-01-2000        950                   800&lt;br /&gt;
         1 01-02-2000        800        950&lt;br /&gt;
         2 01-11-2009       1600&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table history;&lt;br /&gt;
Table dropped.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==sum over (nothing)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP(&lt;br /&gt;
  2      EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  3      ENAME VARCHAR2(10),&lt;br /&gt;
  4      JOB VARCHAR2(9),&lt;br /&gt;
  5      MGR NUMBER(4),&lt;br /&gt;
  6      HIREDATE DATE,&lt;br /&gt;
  7      SAL NUMBER(7, 2),&lt;br /&gt;
  8      COMM NUMBER(7, 2),&lt;br /&gt;
  9      DEPTNO NUMBER(2)&lt;br /&gt;
 10  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7369, &amp;quot;SMITH&amp;quot;, &amp;quot;CLERK&amp;quot;, 7902,TO_DATE(&amp;quot;17-DEC-1980&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 800, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7499, &amp;quot;ALLEN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7521, &amp;quot;WARD&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7566, &amp;quot;JONES&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;2-APR-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7654, &amp;quot;MARTIN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7698, &amp;quot;BLAKE&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7782, &amp;quot;CLARK&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7788, &amp;quot;SCOTT&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7839, &amp;quot;KING&amp;quot;, &amp;quot;PRESIDENT&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7844, &amp;quot;TURNER&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7876, &amp;quot;ADAMS&amp;quot;, &amp;quot;CLERK&amp;quot;, 7788,TO_DATE(&amp;quot;12-JAN-1983&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1100, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7900, &amp;quot;JAMES&amp;quot;, &amp;quot;CLERK&amp;quot;, 7698,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 950, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7902, &amp;quot;FORD&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7934, &amp;quot;MILLER&amp;quot;, &amp;quot;CLERK&amp;quot;, 7782,TO_DATE(&amp;quot;23-JAN-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1300, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; break on deptno skip 1&lt;br /&gt;
SQL&amp;gt; select deptno,&lt;br /&gt;
  2         ename,&lt;br /&gt;
  3         sal,&lt;br /&gt;
  4         sum(sal) over (partition by deptno order by sal) CumDeptTot,&lt;br /&gt;
  5         sum(sal) over (partition by deptno) SalByDept,&lt;br /&gt;
  6         sum(sal) over (order by deptno, sal) CumTot,&lt;br /&gt;
  7         sum(sal) over () TotSal&lt;br /&gt;
  8    from emp&lt;br /&gt;
  9   order by deptno, sal&lt;br /&gt;
 10  /&lt;br /&gt;
    DEPTNO ENAME             SAL CUMDEPTTOT  SALBYDEPT     CUMTOT     TOTSAL&lt;br /&gt;
---------- ---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;
        10 MILLER           1300       1300       8750       1300      29025&lt;br /&gt;
           CLARK            2450       3750       8750       3750      29025&lt;br /&gt;
           KING             5000       8750       8750       8750      29025&lt;br /&gt;
        20 SMITH             800        800      10875       9550      29025&lt;br /&gt;
           ADAMS            1100       1900      10875      10650      29025&lt;br /&gt;
           JONES            2975       4875      10875      13625      29025&lt;br /&gt;
           SCOTT            3000      10875      10875      19625      29025&lt;br /&gt;
           FORD             3000      10875      10875      19625      29025&lt;br /&gt;
        30 JAMES             950        950       9400      20575      29025&lt;br /&gt;
    DEPTNO ENAME             SAL CUMDEPTTOT  SALBYDEPT     CUMTOT     TOTSAL&lt;br /&gt;
---------- ---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;
        30 MARTIN           1250       3450       9400      23075      29025&lt;br /&gt;
           WARD             1250       3450       9400      23075      29025&lt;br /&gt;
           TURNER           1500       4950       9400      24575      29025&lt;br /&gt;
           ALLEN            1600       6550       9400      26175      29025&lt;br /&gt;
           BLAKE            2850       9400       9400      29025      29025&lt;br /&gt;
&lt;br /&gt;
14 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==sum over partition by, order by==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE EMP(&lt;br /&gt;
  2      EMPNO NUMBER(4) NOT NULL,&lt;br /&gt;
  3      ENAME VARCHAR2(10),&lt;br /&gt;
  4      JOB VARCHAR2(9),&lt;br /&gt;
  5      MGR NUMBER(4),&lt;br /&gt;
  6      HIREDATE DATE,&lt;br /&gt;
  7      SAL NUMBER(7, 2),&lt;br /&gt;
  8      COMM NUMBER(7, 2),&lt;br /&gt;
  9      DEPTNO NUMBER(2)&lt;br /&gt;
 10  );&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7369, &amp;quot;SMITH&amp;quot;, &amp;quot;CLERK&amp;quot;, 7902,TO_DATE(&amp;quot;17-DEC-1980&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 800, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7499, &amp;quot;ALLEN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;20-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1600, 300, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7521, &amp;quot;WARD&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;22-FEB-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 500, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7566, &amp;quot;JONES&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;2-APR-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2975, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7654, &amp;quot;MARTIN&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;28-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1250, 1400, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7698, &amp;quot;BLAKE&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;1-MAY-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2850, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7782, &amp;quot;CLARK&amp;quot;, &amp;quot;MANAGER&amp;quot;, 7839,TO_DATE(&amp;quot;9-JUN-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 2450, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7788, &amp;quot;SCOTT&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;09-DEC-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7839, &amp;quot;KING&amp;quot;, &amp;quot;PRESIDENT&amp;quot;, NULL,TO_DATE(&amp;quot;17-NOV-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 5000, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7844, &amp;quot;TURNER&amp;quot;, &amp;quot;SALESMAN&amp;quot;, 7698,TO_DATE(&amp;quot;8-SEP-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1500, 0, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7876, &amp;quot;ADAMS&amp;quot;, &amp;quot;CLERK&amp;quot;, 7788,TO_DATE(&amp;quot;12-JAN-1983&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1100, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7900, &amp;quot;JAMES&amp;quot;, &amp;quot;CLERK&amp;quot;, 7698,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 950, NULL, 30);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7902, &amp;quot;FORD&amp;quot;, &amp;quot;ANALYST&amp;quot;, 7566,TO_DATE(&amp;quot;3-DEC-1981&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 3000, NULL, 20);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO EMP VALUES(7934, &amp;quot;MILLER&amp;quot;, &amp;quot;CLERK&amp;quot;, 7782,TO_DATE(&amp;quot;23-JAN-1982&amp;quot;, &amp;quot;DD-MON-YYYY&amp;quot;), 1300, NULL, 10);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; break on deptno skip 1&lt;br /&gt;
SQL&amp;gt; select deptno,&lt;br /&gt;
  2         ename,&lt;br /&gt;
  3         sal,&lt;br /&gt;
  4         sum(sal) over (partition by deptno order by sal) CumDeptTot,&lt;br /&gt;
  5         sum(sal) over (partition by deptno) SalByDept,&lt;br /&gt;
  6         sum(sal) over (order by deptno, sal) CumTot,&lt;br /&gt;
  7         sum(sal) over () TotSal&lt;br /&gt;
  8    from emp&lt;br /&gt;
  9   order by deptno, sal&lt;br /&gt;
 10  /&lt;br /&gt;
    DEPTNO ENAME             SAL CUMDEPTTOT  SALBYDEPT     CUMTOT     TOTSAL&lt;br /&gt;
---------- ---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;
        10 MILLER           1300       1300       8750       1300      29025&lt;br /&gt;
           CLARK            2450       3750       8750       3750      29025&lt;br /&gt;
           KING             5000       8750       8750       8750      29025&lt;br /&gt;
        20 SMITH             800        800      10875       9550      29025&lt;br /&gt;
           ADAMS            1100       1900      10875      10650      29025&lt;br /&gt;
           JONES            2975       4875      10875      13625      29025&lt;br /&gt;
           SCOTT            3000      10875      10875      19625      29025&lt;br /&gt;
           FORD             3000      10875      10875      19625      29025&lt;br /&gt;
        30 JAMES             950        950       9400      20575      29025&lt;br /&gt;
    DEPTNO ENAME             SAL CUMDEPTTOT  SALBYDEPT     CUMTOT     TOTSAL&lt;br /&gt;
---------- ---------- ---------- ---------- ---------- ---------- ----------&lt;br /&gt;
        30 MARTIN           1250       3450       9400      23075      29025&lt;br /&gt;
           WARD             1250       3450       9400      23075      29025&lt;br /&gt;
           TURNER           1500       4950       9400      24575      29025&lt;br /&gt;
           ALLEN            1600       6550       9400      26175      29025&lt;br /&gt;
           BLAKE            2850       9400       9400      29025      29025&lt;br /&gt;
&lt;br /&gt;
14 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table emp;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use over partition in subquery==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt; create table myTable&lt;br /&gt;
  2  as&lt;br /&gt;
  3  select rownum id, a.*&lt;br /&gt;
  4    from all_objects a&lt;br /&gt;
  5   where 1=0&lt;br /&gt;
  6  /&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; select owner, last_ddl_time, object_name, object_type&lt;br /&gt;
  2  from ( select myTable1.*,max(last_ddl_time) over (partition by owner) max_time from myTable myTable1)&lt;br /&gt;
  3  where last_ddl_time = max_time&lt;br /&gt;
  4  /&lt;br /&gt;
no rows selected&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table myTable;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Analytic Functions: AVG(Mark) OVER==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE SAT (&lt;br /&gt;
  2     StudentID  INT NOT NULL,&lt;br /&gt;
  3     ExamID     INT NOT NULL,&lt;br /&gt;
  4     Mark       INT,&lt;br /&gt;
  5     IfPassed   SMALLINT,&lt;br /&gt;
  6     Comments   VARCHAR(255),&lt;br /&gt;
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,&amp;quot;Good result&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,&amp;quot;Hard&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,&amp;quot;Simple&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT StudentID, Mark, AVG(Mark) OVER&lt;br /&gt;
  2  () Average_Mark&lt;br /&gt;
  3  FROM SAT&lt;br /&gt;
  4  ORDER BY StudentID, Mark;&lt;br /&gt;
 STUDENTID       MARK AVERAGE_MARK&lt;br /&gt;
---------- ---------- ------------&lt;br /&gt;
         1         55         54.8&lt;br /&gt;
         1         73         54.8&lt;br /&gt;
         2         39         54.8&lt;br /&gt;
         2         44         54.8&lt;br /&gt;
         2         63         54.8&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table SAT;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Analytic Functions: AVG(Mark) OVER (ORDER BY StudentID, Mark)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE SAT (&lt;br /&gt;
  2     StudentID  INT NOT NULL,&lt;br /&gt;
  3     ExamID     INT NOT NULL,&lt;br /&gt;
  4     Mark       INT,&lt;br /&gt;
  5     IfPassed   SMALLINT,&lt;br /&gt;
  6     Comments   VARCHAR(255),&lt;br /&gt;
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,&amp;quot;Good result&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,&amp;quot;Hard&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,&amp;quot;Simple&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT StudentID, Mark, AVG(Mark) OVER&lt;br /&gt;
  2  (ORDER BY StudentID, Mark) Running_Average&lt;br /&gt;
  3  FROM SAT&lt;br /&gt;
  4  ORDER BY StudentID, Mark;&lt;br /&gt;
 STUDENTID       MARK RUNNING_AVERAGE&lt;br /&gt;
---------- ---------- ---------------&lt;br /&gt;
         1         55              55&lt;br /&gt;
         1         73              64&lt;br /&gt;
         2         39      55.6666667&lt;br /&gt;
         2         44           52.75&lt;br /&gt;
         2         63            54.8&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table SAT;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Analytic Functions AVG(Mark) OVER (PARTITION BY StudentID ORDER BY StudentID, Mark)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE SAT (&lt;br /&gt;
  2     StudentID  INT NOT NULL,&lt;br /&gt;
  3     ExamID     INT NOT NULL,&lt;br /&gt;
  4     Mark       INT,&lt;br /&gt;
  5     IfPassed   SMALLINT,&lt;br /&gt;
  6     Comments   VARCHAR(255),&lt;br /&gt;
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,&amp;quot;Good result&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,&amp;quot;Hard&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,&amp;quot;Simple&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT StudentID, Mark, AVG(Mark) OVER&lt;br /&gt;
  2  (PARTITION BY StudentID&lt;br /&gt;
  3   ORDER BY StudentID, Mark) Running_Avg_by_Student&lt;br /&gt;
  4  FROM SAT&lt;br /&gt;
  5  ORDER BY StudentID, Mark;&lt;br /&gt;
 STUDENTID       MARK RUNNING_AVG_BY_STUDENT&lt;br /&gt;
---------- ---------- ----------------------&lt;br /&gt;
         1         55                     55&lt;br /&gt;
         1         73                     64&lt;br /&gt;
         2         39                     39&lt;br /&gt;
         2         44                   41.5&lt;br /&gt;
         2         63             48.6666667&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table SAT;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Analytic Functions: AVG(Mark) OVER(PARTITION BY StudentID ORDER BY StudentID, Mark RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE SAT (&lt;br /&gt;
  2     StudentID  INT NOT NULL,&lt;br /&gt;
  3     ExamID     INT NOT NULL,&lt;br /&gt;
  4     Mark       INT,&lt;br /&gt;
  5     IfPassed   SMALLINT,&lt;br /&gt;
  6     Comments   VARCHAR(255),&lt;br /&gt;
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,&amp;quot;Good result&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,&amp;quot;Hard&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,&amp;quot;Simple&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT StudentID, Mark, AVG(Mark) OVER&lt;br /&gt;
  2  (PARTITION BY StudentID&lt;br /&gt;
  3   ORDER BY StudentID, Mark&lt;br /&gt;
  4   RANGE BETWEEN UNBOUNDED PRECEDING AND&lt;br /&gt;
  5   CURRENT ROW&lt;br /&gt;
  6   ) Running_Avg_by_Student&lt;br /&gt;
  7  FROM SAT&lt;br /&gt;
  8  ORDER BY StudentID, Mark;&lt;br /&gt;
 STUDENTID       MARK RUNNING_AVG_BY_STUDENT&lt;br /&gt;
---------- ---------- ----------------------&lt;br /&gt;
         1         55                     55&lt;br /&gt;
         1         73                     64&lt;br /&gt;
         2         39                     39&lt;br /&gt;
         2         44                   41.5&lt;br /&gt;
         2         63             48.6666667&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table SAT;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Analytic Functions: AVG(Mark) OVER(PARTITION BY StudentID ORDER BY StudentID, Mark ROWS 1 preceding==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; CREATE TABLE SAT (&lt;br /&gt;
  2     StudentID  INT NOT NULL,&lt;br /&gt;
  3     ExamID     INT NOT NULL,&lt;br /&gt;
  4     Mark       INT,&lt;br /&gt;
  5     IfPassed   SMALLINT,&lt;br /&gt;
  6     Comments   VARCHAR(255),&lt;br /&gt;
  7     CONSTRAINT PK_SAT PRIMARY KEY (StudentID, ExamID));&lt;br /&gt;
Table created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,1,55,1,&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (1,2,73,1,&amp;quot;Good result&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,3,44,1,&amp;quot;Hard&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed,Comments) VALUES (2,5,39,0,&amp;quot;Simple&amp;quot;);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt; INSERT INTO SAT (StudentID,ExamID,Mark,IfPassed) VALUES (2,6,63,1);&lt;br /&gt;
1 row created.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; SELECT StudentID, Mark, AVG(Mark) OVER&lt;br /&gt;
  2  (PARTITION BY StudentID&lt;br /&gt;
  3   ORDER BY StudentID, Mark&lt;br /&gt;
  4   ROWS 1 preceding&lt;br /&gt;
  5   ) Running_Avg_by_Student&lt;br /&gt;
  6  FROM SAT&lt;br /&gt;
  7  ORDER BY StudentID, Mark;&lt;br /&gt;
 STUDENTID       MARK RUNNING_AVG_BY_STUDENT&lt;br /&gt;
---------- ---------- ----------------------&lt;br /&gt;
         1         55                     55&lt;br /&gt;
         1         73                     64&lt;br /&gt;
         2         39                     39&lt;br /&gt;
         2         44                   41.5&lt;br /&gt;
         2         63                   53.5&lt;br /&gt;
5 rows selected.&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt;&lt;br /&gt;
SQL&amp;gt; drop table SAT;&lt;br /&gt;
Table dropped.&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>