By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
-- With nulls
CREATE TABLE T (Id INT IDENTITY(1,1), Value INT)
INSERT T
VALUES
(NULL), (11), (22), (33),
(NULL), (44), (55), (66),
(NULL), (77), (88), (99),
(NULL)
-- No nulls
CREATE TABLE T2 (Id INT IDENTITY(1,1), Value INT)
INSERT T2
VALUES
(11), (22), (33),
(44), (55), (66),
(77), (88), (99)
-- Naming key for following queries:
-- I = Ignore nulls
-- SP = Strictly preceding - Unbounded preceding through prior row
-- P = Unbounded preceding through current row
-- R = Range +/- 3 rows preceding/following
-- F = Current row through unbounded following
-- SF = Strictly following - next row through unbounded following
-- U = Unbounded Unbounded preceding through unbounded following
22 rows affected
SELECT *
, LAG(Value) OVER(ORDER BY Id) AS Lag
, LAG(Value) IGNORE NULLS OVER(ORDER BY Id) AS LagI
, LEAD(Value) OVER(ORDER BY Id) AS Lead
, LEAD(Value) IGNORE NULLS OVER(ORDER BY Id) AS [LeadI ???]
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS [FirstISF (= expected LeadI)]
FROM T
ORDER BY Id
Id | Value | Lag | LagI | Lead | LeadI ??? | FirstISF (= expected LeadI) |
---|---|---|---|---|---|---|
1 | null | null | null | 11 | null | 11 |
2 | 11 | null | null | 22 | null | 22 |
3 | 22 | 11 | 11 | 33 | 11 | 33 |
4 | 33 | 22 | 22 | null | 22 | 44 |
5 | null | 33 | 33 | 44 | 33 | 44 |
6 | 44 | null | 33 | 55 | 33 | 55 |
7 | 55 | 44 | 44 | 66 | 44 | 66 |
8 | 66 | 55 | 55 | null | 55 | 77 |
9 | null | 66 | 66 | 77 | 66 | 77 |
10 | 77 | null | 66 | 88 | 66 | 88 |
11 | 88 | 77 | 77 | 99 | 77 | 99 |
12 | 99 | 88 | 88 | null | 88 | null |
13 | null | 99 | 99 | null | 99 | null |
SELECT *
, LAG(Value) OVER(ORDER BY Id) AS Lag
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastSP
, LEAD(Value) OVER(ORDER BY Id) AS Lead
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstSF
FROM T
ORDER BY Id
SELECT *
, LAG(Value) IGNORE NULLS OVER(ORDER BY Id) AS LagI
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastISP
, LEAD(Value) IGNORE NULLS OVER(ORDER BY Id) AS [LeadI ???]
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstISF
FROM T2
ORDER BY Id
SELECT *
, LAG(Value) OVER(ORDER BY Id) AS Lag
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastSP
, LEAD(Value) OVER(ORDER BY Id) AS Lead
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstSF
FROM T2
ORDER BY Id
Id | Value | Lag | LastSP | Lead | FirstSF |
---|---|---|---|---|---|
1 | null | null | null | 11 | 11 |
2 | 11 | null | null | 22 | 22 |
3 | 22 | 11 | 11 | 33 | 33 |
4 | 33 | 22 | 22 | null | null |
5 | null | 33 | 33 | 44 | 44 |
6 | 44 | null | null | 55 | 55 |
7 | 55 | 44 | 44 | 66 | 66 |
8 | 66 | 55 | 55 | null | null |
9 | null | 66 | 66 | 77 | 77 |
10 | 77 | null | null | 88 | 88 |
11 | 88 | 77 | 77 | 99 | 99 |
12 | 99 | 88 | 88 | null | null |
13 | null | 99 | 99 | null | null |
Id | Value | LagI | LastISP | LeadI ??? | FirstISF |
---|---|---|---|---|---|
1 | 11 | null | null | null | 22 |
2 | 22 | 11 | 11 | 11 | 33 |
3 | 33 | 22 | 22 | 22 | 44 |
4 | 44 | 33 | 33 | 33 | 55 |
5 | 55 | 44 | 44 | 44 | 66 |
6 | 66 | 55 | 55 | 55 | 77 |
7 | 77 | 66 | 66 | 66 | 88 |
8 | 88 | 77 | 77 | 77 | 99 |
9 | 99 | 88 | 88 | 88 | null |
Id | Value | Lag | LastSP | Lead | FirstSF |
---|---|---|---|---|---|
1 | 11 | null | null | 22 | 22 |
2 | 22 | 11 | 11 | 33 | 33 |
3 | 33 | 22 | 22 | 44 | 44 |
4 | 44 | 33 | 33 | 55 | 55 |
5 | 55 | 44 | 44 | 66 | 66 |
6 | 66 | 55 | 55 | 77 | 77 |
7 | 77 | 66 | 66 | 88 | 88 |
8 | 88 | 77 | 77 | 99 | 99 |
9 | 99 | 88 | 88 | null | null |
SELECT *
, FIRST_VALUE(Value) OVER(ORDER BY Id) AS First
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS FirstSP
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS FirstP1
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS FirstP2
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS FirstR
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS FirstF
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstSF
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS FirstA
FROM T
ORDER BY Id
SELECT *
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id) AS FirstI
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS FirstISP
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS FirstIP1
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS FirstIP2
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS FirstIR
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS FirstIF
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstISF
, FIRST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS FirsIA
FROM T
ORDER BY Id
SELECT *
, FIRST_VALUE(Value) OVER(ORDER BY Id) AS First
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS FirstSP
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS FirstP1
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS FirstP2
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS FirstR
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS FirstF
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS FirstSF
, FIRST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS FirstA
FROM T2
ORDER BY Id
Id | Value | First | FirstSP | FirstP1 | FirstP2 | FirstR | FirstF | FirstSF | FirstA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | null | null | 11 | null |
2 | 11 | null | null | null | null | null | 11 | 22 | null |
3 | 22 | null | null | null | null | null | 22 | 33 | null |
4 | 33 | null | null | null | null | null | 33 | null | null |
5 | null | null | null | null | null | 11 | null | 44 | null |
6 | 44 | null | null | null | null | 22 | 44 | 55 | null |
7 | 55 | null | null | null | null | 33 | 55 | 66 | null |
8 | 66 | null | null | null | null | null | 66 | null | null |
9 | null | null | null | null | null | 44 | null | 77 | null |
10 | 77 | null | null | null | null | 55 | 77 | 88 | null |
11 | 88 | null | null | null | null | 66 | 88 | 99 | null |
12 | 99 | null | null | null | null | null | 99 | null | null |
13 | null | null | null | null | null | 77 | null | null | null |
Id | Value | FirstI | FirstISP | FirstIP1 | FirstIP2 | FirstIR | FirstIF | FirstISF | FirsIA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | 11 | 11 | 11 | 11 |
2 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
3 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
4 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
5 | null | 11 | 11 | 11 | 11 | 11 | 44 | 44 | 11 |
6 | 44 | 11 | 11 | 11 | 11 | 22 | 44 | 55 | 11 |
7 | 55 | 11 | 11 | 11 | 11 | 33 | 55 | 66 | 11 |
8 | 66 | 11 | 11 | 11 | 11 | 44 | 66 | 77 | 11 |
9 | null | 11 | 11 | 11 | 11 | 44 | 77 | 77 | 11 |
10 | 77 | 11 | 11 | 11 | 11 | 55 | 77 | 88 | 11 |
11 | 88 | 11 | 11 | 11 | 11 | 66 | 88 | 99 | 11 |
12 | 99 | 11 | 11 | 11 | 11 | 77 | 99 | null | 11 |
13 | null | 11 | 11 | 11 | 11 | 77 | null | null | 11 |
Id | Value | First | FirstSP | FirstP1 | FirstP2 | FirstR | FirstF | FirstSF | FirstA |
---|---|---|---|---|---|---|---|---|---|
1 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
2 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
3 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
4 | 44 | 11 | 11 | 11 | 11 | 11 | 44 | 55 | 11 |
5 | 55 | 11 | 11 | 11 | 11 | 22 | 55 | 66 | 11 |
6 | 66 | 11 | 11 | 11 | 11 | 33 | 66 | 77 | 11 |
7 | 77 | 11 | 11 | 11 | 11 | 44 | 77 | 88 | 11 |
8 | 88 | 11 | 11 | 11 | 11 | 55 | 88 | 99 | 11 |
9 | 99 | 11 | 11 | 11 | 11 | 66 | 99 | null | 11 |
SELECT *
, LAST_VALUE(Value) OVER(ORDER BY Id) AS Last
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastSP
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS LastP1
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS LastP2
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS LastR
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS LastF
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS LastSF
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LastA
FROM T
ORDER BY Id
SELECT *
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id) AS LastI
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastISP
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS LastIP1
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS LastIP2
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS LastIR
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS LastIF
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS LastISF
, LAST_VALUE(Value) IGNORE NULLS OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LastIA
FROM T
ORDER BY Id
SELECT *
, LAST_VALUE(Value) OVER(ORDER BY Id) AS Last
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS LastSP
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS LastP1
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS LastP2
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS LastR
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS LastF
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS LastSF
, LAST_VALUE(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LastA
FROM T2
ORDER BY Id
Id | Value | Last | LastSP | LastP1 | LastP2 | LastR | LastF | LastSF | LastA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | 33 | null | null | null |
2 | 11 | 11 | null | 11 | 11 | null | null | null | null |
3 | 22 | 22 | 11 | 22 | 22 | 44 | null | null | null |
4 | 33 | 33 | 22 | 33 | 33 | 55 | null | null | null |
5 | null | null | 33 | null | null | 66 | null | null | null |
6 | 44 | 44 | null | 44 | 44 | null | null | null | null |
7 | 55 | 55 | 44 | 55 | 55 | 77 | null | null | null |
8 | 66 | 66 | 55 | 66 | 66 | 88 | null | null | null |
9 | null | null | 66 | null | null | 99 | null | null | null |
10 | 77 | 77 | null | 77 | 77 | null | null | null | null |
11 | 88 | 88 | 77 | 88 | 88 | null | null | null | null |
12 | 99 | 99 | 88 | 99 | 99 | null | null | null | null |
13 | null | null | 99 | null | null | null | null | null | null |
Id | Value | LastI | LastISP | LastIP1 | LastIP2 | LastIR | LastIF | LastISF | LastIA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | 33 | 99 | 99 | 99 |
2 | 11 | 11 | null | 11 | 11 | 33 | 99 | 99 | 99 |
3 | 22 | 22 | 11 | 22 | 22 | 44 | 99 | 99 | 99 |
4 | 33 | 33 | 22 | 33 | 33 | 55 | 99 | 99 | 99 |
5 | null | 33 | 33 | 33 | 33 | 66 | 99 | 99 | 99 |
6 | 44 | 44 | 33 | 44 | 44 | 66 | 99 | 99 | 99 |
7 | 55 | 55 | 44 | 55 | 55 | 77 | 99 | 99 | 99 |
8 | 66 | 66 | 55 | 66 | 66 | 88 | 99 | 99 | 99 |
9 | null | 66 | 66 | 66 | 66 | 99 | 99 | 99 | 99 |
10 | 77 | 77 | 66 | 77 | 77 | 99 | 99 | 99 | 99 |
11 | 88 | 88 | 77 | 88 | 88 | 99 | 99 | 99 | 99 |
12 | 99 | 99 | 88 | 99 | 99 | 99 | 99 | null | 99 |
13 | null | 99 | 99 | 99 | 99 | 99 | null | null | 99 |
Id | Value | Last | LastSP | LastP1 | LastP2 | LastR | LastF | LastSF | LastA |
---|---|---|---|---|---|---|---|---|---|
1 | 11 | 11 | null | 11 | 11 | 44 | 99 | 99 | 99 |
2 | 22 | 22 | 11 | 22 | 22 | 55 | 99 | 99 | 99 |
3 | 33 | 33 | 22 | 33 | 33 | 66 | 99 | 99 | 99 |
4 | 44 | 44 | 33 | 44 | 44 | 77 | 99 | 99 | 99 |
5 | 55 | 55 | 44 | 55 | 55 | 88 | 99 | 99 | 99 |
6 | 66 | 66 | 55 | 66 | 66 | 99 | 99 | 99 | 99 |
7 | 77 | 77 | 66 | 77 | 77 | 99 | 99 | 99 | 99 |
8 | 88 | 88 | 77 | 88 | 88 | 99 | 99 | 99 | 99 |
9 | 99 | 99 | 88 | 99 | 99 | 99 | 99 | null | 99 |
SELECT *
, MIN(Value) OVER(ORDER BY Id) AS Min
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MinSP
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS MinP1
, MIN(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS MinP2
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS MinR
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MinF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS MinSF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MinA
FROM T
ORDER BY Id
SELECT *
, MIN(Value) OVER(ORDER BY Id) AS Min
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MinSP
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS MinP1
, MIN(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS MinP2
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS MinR
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MinF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS MinSF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MinA
FROM T2
ORDER BY Id
Id | Value | Min | MinSP | MinP1 | MinP2 | MinR | MinF | MinSF | MinA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | 11 | 11 | 11 | 11 |
2 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
3 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
4 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
5 | null | 11 | 11 | 11 | 11 | 11 | 44 | 44 | 11 |
6 | 44 | 11 | 11 | 11 | 11 | 22 | 44 | 55 | 11 |
7 | 55 | 11 | 11 | 11 | 11 | 33 | 55 | 66 | 11 |
8 | 66 | 11 | 11 | 11 | 11 | 44 | 66 | 77 | 11 |
9 | null | 11 | 11 | 11 | 11 | 44 | 77 | 77 | 11 |
10 | 77 | 11 | 11 | 11 | 11 | 55 | 77 | 88 | 11 |
11 | 88 | 11 | 11 | 11 | 11 | 66 | 88 | 99 | 11 |
12 | 99 | 11 | 11 | 11 | 11 | 77 | 99 | null | 11 |
13 | null | 11 | 11 | 11 | 11 | 77 | null | null | 11 |
Warning: Null value is eliminated by an aggregate or other SET operation.
Id | Value | Min | MinSP | MinP1 | MinP2 | MinR | MinF | MinSF | MinA |
---|---|---|---|---|---|---|---|---|---|
1 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
2 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
3 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
4 | 44 | 11 | 11 | 11 | 11 | 11 | 44 | 55 | 11 |
5 | 55 | 11 | 11 | 11 | 11 | 22 | 55 | 66 | 11 |
6 | 66 | 11 | 11 | 11 | 11 | 33 | 66 | 77 | 11 |
7 | 77 | 11 | 11 | 11 | 11 | 44 | 77 | 88 | 11 |
8 | 88 | 11 | 11 | 11 | 11 | 55 | 88 | 99 | 11 |
9 | 99 | 11 | 11 | 11 | 11 | 66 | 99 | null | 11 |
SELECT *
, MIN(Value) OVER(ORDER BY Id) AS Min
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MinSP
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS MinP1
, MIN(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS MinP2
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS MinR
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MinF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS MinSF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MinA
FROM T
ORDER BY Id
SELECT *
, MIN(Value) OVER(ORDER BY Id) AS Min
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MinSP
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS MinP1
, MIN(Value) OVER(ORDER BY Id ROWS UNBOUNDED PRECEDING) AS MinP2
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS MinR
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS MinF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS MinSF
, MIN(Value) OVER(ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS MinA
FROM T2
ORDER BY Id
Id | Value | Min | MinSP | MinP1 | MinP2 | MinR | MinF | MinSF | MinA |
---|---|---|---|---|---|---|---|---|---|
1 | null | null | null | null | null | 11 | 11 | 11 | 11 |
2 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
3 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
4 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
5 | null | 11 | 11 | 11 | 11 | 11 | 44 | 44 | 11 |
6 | 44 | 11 | 11 | 11 | 11 | 22 | 44 | 55 | 11 |
7 | 55 | 11 | 11 | 11 | 11 | 33 | 55 | 66 | 11 |
8 | 66 | 11 | 11 | 11 | 11 | 44 | 66 | 77 | 11 |
9 | null | 11 | 11 | 11 | 11 | 44 | 77 | 77 | 11 |
10 | 77 | 11 | 11 | 11 | 11 | 55 | 77 | 88 | 11 |
11 | 88 | 11 | 11 | 11 | 11 | 66 | 88 | 99 | 11 |
12 | 99 | 11 | 11 | 11 | 11 | 77 | 99 | null | 11 |
13 | null | 11 | 11 | 11 | 11 | 77 | null | null | 11 |
Warning: Null value is eliminated by an aggregate or other SET operation.
Id | Value | Min | MinSP | MinP1 | MinP2 | MinR | MinF | MinSF | MinA |
---|---|---|---|---|---|---|---|---|---|
1 | 11 | 11 | null | 11 | 11 | 11 | 11 | 22 | 11 |
2 | 22 | 11 | 11 | 11 | 11 | 11 | 22 | 33 | 11 |
3 | 33 | 11 | 11 | 11 | 11 | 11 | 33 | 44 | 11 |
4 | 44 | 11 | 11 | 11 | 11 | 11 | 44 | 55 | 11 |
5 | 55 | 11 | 11 | 11 | 11 | 22 | 55 | 66 | 11 |
6 | 66 | 11 | 11 | 11 | 11 | 33 | 66 | 77 | 11 |
7 | 77 | 11 | 11 | 11 | 11 | 44 | 77 | 88 | 11 |
8 | 88 | 11 | 11 | 11 | 11 | 55 | 88 | 99 | 11 |
9 | 99 | 11 | 11 | 11 | 11 | 66 | 99 | null | 11 |