Skip to content

Commit 1f9f231

Browse files
authored
feat: add sql solution to lc problem: No.2494 (doocs#1144)
No.2494.Merge Overlapping Events in the Same Hall
1 parent 69f15a1 commit 1f9f231

File tree

4 files changed

+115
-2
lines changed

4 files changed

+115
-2
lines changed

.prettierrc

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"solution/2000-2099/2066.Account Balance/Solution.sql",
3838
"solution/2200-2299/2230.The Users That Are Eligible for Discount/Solution.sql",
3939
"solution/2600-2699/2686.Immediate Food Delivery III/Solution.sql",
40+
"solution/2400-2499/2494.Merge Overlapping Events in the Same Hall/Solution.sql",
4041
"solution/2700-2799/2752.Customers with Maximum Number of Transactions on Consecutive Days/Solution.sql"
4142
],
4243
"options": {

solution/2400-2499/2494.Merge Overlapping Events in the Same Hall/README.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,44 @@ HallEvents 表:
7373
<!-- 这里可写当前语言的特殊实现逻辑 -->
7474

7575
```sql
76-
76+
# Write your MySQL query statement below
77+
WITH
78+
S AS (
79+
SELECT
80+
hall_id,
81+
start_day,
82+
end_day,
83+
max(end_day) OVER (
84+
PARTITION BY hall_id
85+
ORDER BY start_day
86+
) AS cur_max_end_day
87+
FROM HallEvents
88+
),
89+
T AS (
90+
SELECT
91+
*,
92+
if(
93+
start_day <= lag(cur_max_end_day) OVER (
94+
PARTITION BY hall_id
95+
ORDER BY start_day
96+
),
97+
0,
98+
1
99+
) AS start
100+
FROM S
101+
),
102+
P AS (
103+
SELECT
104+
*,
105+
sum(start) OVER (
106+
PARTITION BY hall_id
107+
ORDER BY start_day
108+
) AS gid
109+
FROM T
110+
)
111+
SELECT hall_id, min(start_day) AS start_day, max(end_day) AS end_day
112+
FROM P
113+
GROUP BY hall_id, gid;
77114
```
78115

79116
<!-- tabs:end -->

solution/2400-2499/2494.Merge Overlapping Events in the Same Hall/README_EN.md

+38-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,44 @@ Hall 3:
6868
### **SQL**
6969

7070
```sql
71-
71+
# Write your MySQL query statement below
72+
WITH
73+
S AS (
74+
SELECT
75+
hall_id,
76+
start_day,
77+
end_day,
78+
max(end_day) OVER (
79+
PARTITION BY hall_id
80+
ORDER BY start_day
81+
) AS cur_max_end_day
82+
FROM HallEvents
83+
),
84+
T AS (
85+
SELECT
86+
*,
87+
if(
88+
start_day <= lag(cur_max_end_day) OVER (
89+
PARTITION BY hall_id
90+
ORDER BY start_day
91+
),
92+
0,
93+
1
94+
) AS start
95+
FROM S
96+
),
97+
P AS (
98+
SELECT
99+
*,
100+
sum(start) OVER (
101+
PARTITION BY hall_id
102+
ORDER BY start_day
103+
) AS gid
104+
FROM T
105+
)
106+
SELECT hall_id, min(start_day) AS start_day, max(end_day) AS end_day
107+
FROM P
108+
GROUP BY hall_id, gid;
72109
```
73110

74111
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Write your MySQL query statement below
2+
WITH
3+
S AS (
4+
SELECT
5+
hall_id,
6+
start_day,
7+
end_day,
8+
max(end_day) OVER (
9+
PARTITION BY hall_id
10+
ORDER BY start_day
11+
) AS cur_max_end_day
12+
FROM HallEvents
13+
),
14+
T AS (
15+
SELECT
16+
*,
17+
if(
18+
start_day <= lag(cur_max_end_day) OVER (
19+
PARTITION BY hall_id
20+
ORDER BY start_day
21+
),
22+
0,
23+
1
24+
) AS start
25+
FROM S
26+
),
27+
P AS (
28+
SELECT
29+
*,
30+
sum(start) OVER (
31+
PARTITION BY hall_id
32+
ORDER BY start_day
33+
) AS gid
34+
FROM T
35+
)
36+
SELECT hall_id, min(start_day) AS start_day, max(end_day) AS end_day
37+
FROM P
38+
GROUP BY hall_id, gid;

0 commit comments

Comments
 (0)