Skip to content

Commit ac04b9a

Browse files
committed
task 57
1 parent 7ec3290 commit ac04b9a

File tree

4 files changed

+79
-2
lines changed

4 files changed

+79
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
54. Нарисуй треугольник 2 - [Draw The Triangle 2](./tasks/54.md)
8181
55. Печать простых чисел - [Print Prime Numbers](./tasks/55.md)
8282
56. 15 дней изучения SQL - [15 Days of Learning SQL](./tasks/56.md)
83+
57. Планирование проекта SQL - [SQL Project Planning](./tasks/57.md)
8384

8485

8586
## В процессе... , будет дополнено)

tasks/57.md

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,78 @@
33
<img src="./art/57.png" alt="solution" >
44

55
#### eng:
6+
You are given a table, Projects, containing three columns: Task_ID, Start_Date and End_Date. It is guaranteed that the difference between the End_Date and the Start_Date is equal to 1 day for each row in the table.
67

78

89

10+
If the End_Date of the tasks are consecutive, then they are part of the same project. Samantha is interested in finding the total number of different projects completed.
11+
12+
Write a query to output the start and end dates of projects listed by the number of days it took to complete the
13+
project in ascending order. If there is more than one project that have the same number of completion days, then
14+
order by the start date of the project.
15+
16+
917
#### рус:
18+
Вам дана таблица Projects, содержащая три столбца: Task_ID, Start_Date и End_Date. Гарантируется, что разница между End_Date и Start_Date равна 1 дню для каждой строки в таблице.
19+
1020

1121

22+
Если End_Date задач совпадают, то они являются частью одного и того же проекта. Саманте интересно узнать общее количество завершенных различных проектов.
23+
24+
Напишите запрос для вывода дат начала и окончания проектов, перечисленных по количеству дней, затраченных на
25+
выполнение проекта, в порядке возрастания. Если имеется более одного проекта с одинаковым количеством дней
26+
завершения, заказывайте по дате начала проекта.
27+
1228

1329
#### код с коментариями:
1430
```sql
15-
31+
/* Этот внешний запрос предназначен только для упорядочения по продолжительности проекта */
32+
SELECT
33+
P3.sd,P3.ed
34+
FROM
35+
(SELECT
36+
MIN(P1.Start_Date) AS sd,
37+
P2.End_Date AS ed
38+
FROM Projects AS P1
39+
INNER JOIN Projects AS P2
40+
ON p2.End_Date
41+
NOT IN (SELECT
42+
Start_Date
43+
FROM Projects)
44+
/*мы исключаем даты окончания, существующие на Start_Date, что означает, что они являются частью одного и того же проекта*/
45+
AND
46+
/*Как только мы нашли дату окончания, не совпадающую с любой из дат начала, мы проверяем в обратном порядке, сколько других столбцов есть
47+
в течение одного и того же промежутка времени считайте их первыми, если число равно разнице в днях, что означает, что они на самом деле
48+
связаны. Используйте «группировать по» End_date с MIN(), чтобы найти самую раннюю дату начала, которая связана */
49+
(SELECT
50+
COUNT(*)
51+
FROM Projects
52+
WHERE Start_Date BETWEEN P1.Start_Date AND P2.End_Date ) = DATEDIFF(P2.End_Date,P1.Start_Date)
53+
GROUP BY P2.End_Date) AS P3
54+
ORDER by DATEDIFF(P3.ed, P3.sd), P3.sd ;
1655
```
1756

1857
#### код для hackerrank:
1958
```sql
20-
59+
SELECT
60+
P3.sd,P3.ed
61+
FROM
62+
(SELECT
63+
MIN(P1.Start_Date) AS sd,
64+
P2.End_Date AS ed
65+
FROM Projects AS P1
66+
INNER JOIN Projects AS P2
67+
ON p2.End_Date
68+
NOT IN (SELECT
69+
Start_Date
70+
FROM Projects)
71+
AND
72+
(SELECT
73+
COUNT(*)
74+
FROM Projects
75+
WHERE Start_Date BETWEEN P1.Start_Date AND P2.End_Date ) = DATEDIFF(P2.End_Date,P1.Start_Date)
76+
GROUP BY P2.End_Date) AS P3
77+
ORDER by DATEDIFF(P3.ed, P3.sd), P3.sd ;
2178
```
2279

2380

tasks/57.sql

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
SELECT
2+
P3.sd,P3.ed
3+
FROM
4+
(SELECT
5+
MIN(P1.Start_Date) AS sd,
6+
P2.End_Date AS ed
7+
FROM Projects AS P1
8+
INNER JOIN Projects AS P2
9+
ON p2.End_Date
10+
NOT IN (SELECT
11+
Start_Date
12+
FROM Projects)
13+
AND
14+
(SELECT
15+
COUNT(*)
16+
FROM Projects
17+
WHERE Start_Date BETWEEN P1.Start_Date AND P2.End_Date ) = DATEDIFF(P2.End_Date,P1.Start_Date)
18+
GROUP BY P2.End_Date) AS P3
19+
ORDER by DATEDIFF(P3.ed, P3.sd), P3.sd ;

tasks/art/57.png

50.5 KB
Loading

0 commit comments

Comments
 (0)