Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 29.09.2017
Сообщений: 36

Оконные функции

21.12.2020, 20:56. Показов 1028. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть замечания по запросу в конце, как можно исправить ?
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
-- Аэропорты
CREATE TABLE Airports(
    ID   INT      NOT NULL PRIMARY KEY IDENTITY(1,1),
    Name CHAR(60) NOT NULL
);
INSERT INTO Airports(Name)
    VALUES
        ('Аэропорт Хатсфильда'),
        ('Аэропорт Атланты'),
        ('Аэропорт Хитроу'),
        ('Аэропорт Шарля-де-Голя');
 
-- Рейсы
CREATE TABLE FlightNums(
    ID          INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    Num         INT NOT NULL,
    ID_Airports INT NOT NULL FOREIGN KEY REFERENCES Airports(ID),
    IsDeparture bit NOT NULL,
    Duration    INT NOT NULL,
    Distance    INT NOT NULL
);
INSERT INTO FlightNums(Num, ID_Airports, IsDeparture, Duration, Distance)
    VALUES
        (111, 1, 1, 600, 6500),
        (112, 2, 0, 660, 2000),
        (113, 3, 1, 720, 2500),
        (114, 3, 1, 720, 2500),
        (115, 3, 1, 720, 2500);
 
-- Цены
CREATE TABLE Prices(
    ID            INT  NOT NULL PRIMARY KEY IDENTITY(1,1),
    ID_FlightNums INT  NOT NULL FOREIGN KEY REFERENCES FlightNums(ID),
    DateStart     DATE NOT NULL,
    Price         INT  NOT NULL
);
INSERT INTO Prices(ID_FlightNums, DateStart, Price)
    VALUES
        (1, '2019-08-14', 10000),
        (2, '2019-01-03', 30000),
        (3, '2019-01-19', 40000),
        (4, '2019-01-19', 25000),
        (5, '2019-01-19', 55000),
        (1, '2020-09-10', 10500),
        (2, '2020-02-21', 31000),
        (3, '2020-05-08', 38000),
        (4, '2020-04-12', 27000),
        (5, '2020-03-09', 53000),
        (1, '2020-10-10', 11500),
        (2, '2020-03-21', 33000),
        (3, '2020-05-18', 35000),
        (4, '2020-04-22', 23000),
        (5, '2020-03-19', 51000);
 
-- Модели самолетов
CREATE TABLE Models(
    ID          INT      NOT NULL PRIMARY KEY IDENTITY(1,1),
    Name        CHAR(50) NOT NULL,
    SeatsNum    INT      NOT NULL,
    FlightRange INT      NOT NULL
);
INSERT INTO Models(Name, SeatsNum, FlightRange)
    VALUES
        ('Ту-34', 96, 2800),
        ('ИЛ-62', 138, 10000),
        ('Боинг-737', 114, 2500);
 
-- Командиры экипажей
CREATE TABLE Captains(
    ID       INT      NOT NULL PRIMARY KEY IDENTITY(1,1),
    FullName CHAR(100) NOT NULL
);
INSERT INTO Captains(FullName)
    VALUES
        ('Орлов Олег Олегович'),
        ('Иванов Иван Иванович'),
        ('Петров Петр Петрович'),
        ('Сидоров Сидор Сидорович');
 
-- Полеты
CREATE TABLE Flights(
    ID            INT      NOT NULL PRIMARY KEY IDENTITY(1,1),
    ID_FlightNums INT      NOT NULL FOREIGN KEY REFERENCES FlightNums(ID),
    DateAndTime   datetime NOT NULL,
    ID_Models     INT               FOREIGN KEY REFERENCES Models(ID),
    ID_Captains   INT               FOREIGN KEY REFERENCES Captains(ID)
);
INSERT INTO Flights(ID_FlightNums, DateAndTime, ID_Models, ID_Captains)
    VALUES
        (1, '2019-08-23T13:00:00', 2, 1),
        (2, '2019-11-23T13:00:00', 2, 1),
        (3, '2019-02-23T13:00:00', 2, 1),
        (4, '2019-05-23T13:00:00', 2, 1),
        (5, '2019-05-27T13:00:00', 2, 1),
        (1, '2019-09-23T13:00:00', 2, 1),
        (2, '2019-12-23T13:00:00', 2, 1),
        (3, '2019-03-24T13:00:00', 2, 1),
        (4, '2019-05-24T13:00:00', 2, 1),
        (5, '2019-06-23T13:00:00', 2, 1),
        (1, '2020-01-21T13:00:00', 2, 1),
        (2, '2020-02-23T13:00:00', 2, 1),
        (3, '2020-05-17T13:00:00', 2, 1),
        (4, '2020-06-03T13:00:00', 2, 1),
        (5, '2020-08-23T13:00:00', 2, 1);
 
-- Пассажиры
CREATE TABLE Passengers(
    ID         INT       NOT NULL PRIMARY KEY IDENTITY(1,1),
    ID_Flights INT       NOT NULL FOREIGN KEY REFERENCES Flights(ID),
    PlaceNum   INT       NOT NULL,
    FullName   CHAR(100) NOT NULL,
    Passport   CHAR(20)  NOT NULL
);
INSERT INTO Passengers(ID_Flights, PlaceNum, FullName, Passport)
    VALUES
        (1, 10, 'Дементьев Аркадий Тимурович',     '1234 456474'),
        (2, 20, 'Сидоров Федор Федорович',         '1234 658756'),
        (2, 30, 'Ястребов Яков Яковлевич',         '7896 734532'),
        (1, 10, 'Германов Герман Германович',      '1234 456474'),
        (4, 20, 'Герасимов Илларион Артемович',    '1234 658756'),
        (3, 30, 'Поляков Павел Станиславович',     '7896 734532'),
        (5, 10, 'Тарасов Игнатий Германович',      '1234 456474'),
        (6, 20, 'Игнатов Лаврентий Святославович', '1234 658756'),
        (7, 30, 'Уваров Самуил Константинович',    '7896 734532'),
        (3, 10, 'Максимов Юлиан Георгьевич',       '1234 456474'),
        (8, 20, 'Крылов Терентий Авдеевич',        '1234 658756'),
        (9, 30, 'Шарапов Даниил Якунович',         '7896 734532'),
        (10, 10, 'Егоров Аввакум Агафонович',      '1234 456474'),
        (12, 20, 'Коновалов Августин Иосифович',   '1234 658756'),
        (11, 30, 'Меркушев Гаянэ Николаевич',      '7896 734532');
 
/*
 
    С помощью оконных функций составить таблицу совершенных полетов по всем рейсам со следующей структурой:
    •    Номер рейса
    •    Дата и время полета
    •    Сумма выручки от проданных билетов
    Сортировка строк в таблице:
    •    Номер рейса – по возрастанию
    •    Дата и время полета - по возрастанию.
    Подобрать входные тестовые данные так, чтобы в выходной таблице было не менее 3-х рейсов с минимум 3-мя периодами разных цен для каждого из этих рейсов,
    и по каждому периоду цен был хотя бы один полет.
*/
 
!!! Неудачный запрос, поэтому и приходится с помощью DISTINCT отбрасывать лишние результаты.
!!! Правильнее: нужная оконная функция в подзапросе, а группировка используется для суммирования на верхнем уровне запроса.
SELECT DISTINCT
    FlightNums.Num,
    Flights.DateAndTime,
    SUM(Price) OVER
        (
            partition BY Passengers.ID_Flights
        ) AS Amount
    FROM Flights
        INNER JOIN Passengers
            ON Flights.ID = Passengers.ID_Flights
        INNER JOIN FlightNums
            ON Flights.ID_FlightNums = FlightNums.ID
        INNER JOIN Prices
            ON FlightNums.ID = Prices.ID_FlightNums
!!! С таким форматированием непонятно где искать закрывающую скобку
        INNER JOIN (SELECT 
                        Flights.ID,
                            MAX(Prices.DateStart) AS DateStart
                        FROM Prices 
                            INNER JOIN FlightNums
                                ON FlightNums.ID = Prices.ID_FlightNums
                            INNER JOIN Flights 
                                ON Flights.DateAndTime >= Prices.DateStart AND
                                   FlightNums.ID = Flights.ID_FlightNums
                        GROUP BY Flights.ID) AS TempPrices
            ON Flights.ID = TempPrices.ID AND 
               Prices.DateStart = TempPrices.DateStart
    ORDER BY FlightNums.Num      ASC,
             Flights.DateAndTime ASC
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2020, 20:56
Ответы с готовыми решениями:

Оконные функции для интервалов дат
Доброго времени суток! Имеется таблица по развозу товара разными авто (MS SQL 2012): CAR| SHOP| DATE Logan| Хлеб| ...

Куплю книгу "Высокопроизводительный код T-SQL. Оконные функции, Ицик Бен-Ган"
Кто может продать книгу "Microsoft SQL Server 2012. Высокопроизводительный код T-SQL. Оконные функции, Ицик Бен-Ган"? В магазинах не...

Оконные функции
Здравствуйте. Возникла небольшая проблема. Есть некий сигнал - набор значений синуса, который имеет частоту 11 кГц. В модели Симулинк...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2020, 20:56
Помогаю со студенческими работами здесь

Оконные функции
Приветствую, форумчане. Столкнулся с необходимостью высчитать агрегатное значение от агрегатной функции (максимум от сумм частного, т.е...

Оконные аналитические функции
Добрый вечер, есть таблица вида project id integer name character varying category character varying ...

Как лучше учиться: писать консольные приложения или оконные? И если писать оконные, то на чём лучше?
На днях я узнал про Borland c++ builder и хочу воспользоваться им, но можно и писать код, что-бы было оконное приложение, так что-же лучше?...

Оконные приложения
Помогите плиз. Работал на Pascale перешел на Delphi ради визуального программирования и сетей потом узнал что на Pascal.net можно делать...

Оконные приложения
Раньше изучал только консольные приложения. Но вот понадобилось сделать оконное и я понял, что с не таким уж плохим знанием с++ я абсолютно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru