forked from shawlu95/Beyond-LeetCode-SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmssql_window.sql
42 lines (41 loc) · 886 Bytes
/
mssql_window.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- MS SQL: window
WITH long_table AS (
SELECT
*
,LAG(people, 2) OVER (ORDER BY id ASC) AS pre2
,LAG(people, 1) OVER (ORDER BY id ASC) AS pre1
,LEAD(people, 1) OVER (ORDER BY id ASC) AS nxt1
,LEAD(people, 2) OVER (ORDER BY id ASC) AS nxt2
FROM stadium
)
SELECT
id
,visit_date
,people
FROM long_table
WHERE people >= 100
AND ((pre2 >= 100 AND pre1 >= 100)
OR (pre1 >= 100 AND nxt1 >= 100)
OR (nxt1 >= 100 AND nxt2 >= 100))
ORDER BY id;
-- MySQL 8 equivalent
WITH long_table AS (
SELECT
*
,LAG(people, 2) OVER w AS pre2
,LAG(people, 1) OVER w AS pre1
,LEAD(people, 1) OVER w AS nxt1
,LEAD(people, 2) OVER w AS nxt2
FROM stadium
WINDOW w AS (ORDER BY id ASC)
)
SELECT
id
,visit_date
,people
FROM long_table
WHERE people >= 100
AND ((pre2 >= 100 AND pre1 >= 100)
OR (pre1 >= 100 AND nxt1 >= 100)
OR (nxt1 >= 100 AND nxt2 >= 100))
ORDER BY id;