Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Luxmunx
2 / 2 / 2
Регистрация: 05.11.2012
Сообщений: 108

Вывести новые данные "перекрывающие" старые, не выводя старые

29.06.2022, 21:45. Показов 764. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Описание можно пропустить и читать сразу, что под спойлером
Скучное описание
Есть две таблицы. В одной задаются программы работы, в другой сессии подключения во время этих работ.
Программы и сессии выполняются последовательно, без пересечений.
Может возникнуть необходимость добавить новую программу работы без очереди. И новая программа перекроет своим временным интервалом уже существующие программы работы и сессии. Новая программа работы может либо полностью перекрыть сессии из предыдущей программы, либо не перекрыть совсем. Недопустима ситуация, когда новая программа работы начинает или заканчивает действие во время какой-то сессии.

На скриншоте заджойнены две таблицы: программы работы и сессии в них.
Я добавил новую программу работы на 7 строке, она своим временным интервалом перекрывает две сессии с id4 и id5.

Мне нужно вывести все строки, КРОМЕ ТЕХ, которые перекрыты новой программной работой с временным интервалом, то есть все без id4 id5.

Я написал такой запрос:
T-SQL
1
2
3
4
SELECT * 
FROM testtask.dbo.Work_programs wp LEFT JOIN testtask.dbo.Sessions s on wp.pr_num = s.pr_num
WHERE (s.session_begin BETWEEN wp.pr_begin AND wp.pr_end) 
      AND (s.session_end BETWEEN wp.pr_begin AND wp.pr_end)
Его вывод -- таблица снизу на скриншоте. Но мое условие не перекрывает id4/5, а 7 строка с новой программой работы и не отображается.

Помогите, пожалуйста, составить правильное условие
Миниатюры
Вывести новые данные "перекрывающие" старые, не выводя старые  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2022, 21:45
Ответы с готовыми решениями:

Изменить старые данные в БД на новые
в общем у меня база данных, я нахожу какие то данные, делаю корректировку и потом эти откоректированные данные вношу в таблицу причем...

ComboBox1_Change перезаписывает новые данные на старые | MS Excel
Здравствуйте Коллеги! Прошу помочь в решении следующей ситуации. Есть форма ввода, редактирования, удаления данных. Проблема с...

Вывести старые и новые цены.
Народ решите задачу пожалуйста очень надо. Условия: Цены на два вида товара выросли на p процентов.Вывести старые и новые цены.

5
 Аватар для Luxmunx
2 / 2 / 2
Регистрация: 05.11.2012
Сообщений: 108
29.06.2022, 22:26  [ТС]
T-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
CREATE DATABASE testtask
 
CREATE TABLE Work_programs
(
    pr_num int NOT NULL IDENTITY,
    pr_begin datetime NOT NUll,
    pr_end datetime NOT NULL,
    PRIMARY KEY(pr_num)
);
 
CREATE TABLE Sessions
(
    id int IDENTITY,
    pr_num int NOT NULL,
    session_begin datetime NOT NULL,
    session_end datetime NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY (pr_num) REFERENCES Work_programs (pr_num)
);
 
INSERT INTO Work_programs (pr_begin, pr_end) 
VALUES 
('01-01-2022 00:00:01', '01-01-2022 23:59:59'),
('02-01-2022 00:00:01', '02-01-2022 23:59:59'),
('03-01-2022 00:00:01', '03-01-2022 23:59:59'),
('04-01-2022 00:00:01', '04-01-2022 23:59:59'),
('05-01-2022 00:00:01', '05-01-2022 23:59:59'),
('06-01-2022 00:00:01', '06-01-2022 23:59:59')
 
INSERT INTO Sessions (pr_num, session_begin, session_end) 
VALUES 
(1, '01-01-2022 01:00:01', '01-01-2022 10:00:00'),
(1, '01-01-2022 11:00:01', '01-01-2022 15:00:00'),
(1, '01-01-2022 16:00:01', '01-01-2022 20:00:00'),
(2, '02-01-2022 01:00:01', '02-01-2022 10:00:00'), -- exclude
(2, '02-01-2022 11:00:01', '02-01-2022 15:00:00'), -- exclude
(2, '02-01-2022 16:00:01', '02-01-2022 20:00:00')
 
INSERT INTO Work_programs (pr_begin, pr_end) 
VALUES 
('02-01-2022 00:00:00', '02-01-2022 16:00:00')
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
30.06.2022, 09:21
типа такого, не факт что сработает на других данных, нужно отлаживать и отлаживать)
T-SQL
1
2
3
4
5
6
7
select * 
  from Work_programs wp LEFT JOIN Sessions s on wp.pr_num = s.pr_num
  where not exists(select * 
                     from Work_programs w 
                     where w.pr_begin<s.session_end and 
                           w.pr_end>s.session_begin and 
                           wp.pr_num<>w.pr_num)
0
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
30.06.2022, 09:36
Цитата Сообщение от Luxmunx Посмотреть сообщение
Я написал такой запрос:
T-SQL
1
2
3
CREATE DATABASE testtask
 
CREATE TABLE Work_programs
Пожелание, что бы не "мусорить" на компах форумчан, желательно "чистить" за собой

T-SQL
1
2
drop table
drop database
или создавать репро-код в tempdb или через таблевары.
0
 Аватар для Luxmunx
2 / 2 / 2
Регистрация: 05.11.2012
Сообщений: 108
30.06.2022, 14:11  [ТС]
Цитата Сообщение от PaulWist Посмотреть сообщение
создавать репро-код в tempdb или через таблевары.
можно, пожалуйста, подробнее?

Добавлено через 15 секунд
Цитата Сообщение от Аватар Посмотреть сообщение
типа такого, не факт что сработает на других данных, нужно отлаживать и отлаживать)
Попробую разобраться )
0
668 / 291 / 120
Регистрация: 12.04.2022
Сообщений: 1,000
30.06.2022, 14:21
Цитата Сообщение от Luxmunx Посмотреть сообщение
можно, пожалуйста, подробнее?
T-SQL
1
2
3
4
5
6
7
8
9
10
use tempdb
go
 
create table Work_programs ...
 
insert ...
 
select ...
 
drop table
T-SQL
1
2
3
4
5
6
7
declare @Work_programs table ( ..).
 
insert ...
 
select ...
 
etc
The Table Variable in SQL Server

Надеюсь понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2022, 14:21
Помогаю со студенческими работами здесь

Как вывести новые комментарии сверху, а старые снизу
Возникла проблема. Как вывести новые комментарии сверху, а старые естественно снизу (тема Delighted Black). Заранее благодарен.

Как каждый раз добавлять новую строку в БД и новые данные, чтоб старые не затирались
Всем привет. Постараюсь объяснить то что я хочу. Я написал приложение БД, в котором есть информация о сотрудниках на СГЛ. Сейчас мне надо...

Что лучше оставить старые планки и добавить новые, или вытащить их и поставить новые?
Привет всем нуждаюсь в совете. У меня комп на базе AMD Мамка A8N-SLI Deluxe. Сейчас стоит у меня 2 планки Corsair Value Select...

Цены на два вида товаров выросли на р процентов. Вывести старые и новые цены
Задача 1 Программирование линейных алгоритмов Цены на два вида товаров выросли на р процентов. Вывести старые и новые цены. ...

Цены на два виды товаров выросли на р процентов. Вывести старые и новые цены
Помогите


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru