powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, составить запрос!!! :0(
7 сообщений из 7, страница 1 из 1
Помогите, пожалуйста, составить запрос!!! :0(
    #32018424
Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле дат (от 01.01.1997 до 04.12.2001).
Но какие-то даты отсутствуют (праздники, выходные и т.д.)
Необходимо вывести те даты, которых в таблице нет.
Понимаю, что вопрос типичный, но , полистав форум, ответа не нашел (может проглядел?)
Один вариант я знаю (сделать таблицу с датами без пропусков и сравнить с исходной, но... это топорно).
Можно ли сделать это запросом, а не хранимой процедурой?
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018425
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как отсутствующие даты - объекты виртуальные, в реальных таблицах их нет, то чтобы их получить в виде результата, их нужно создавать. Это должна быть постоянная или временная таблица. Других способов, помоему, не существует.
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018426
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле вариант с таблицей с датами без пропусков не такой уж топорный. Еще лучше иметь таблицу просто с числами, допустим от 0 до 999. В данном случае, учитывая что праздники не бывают больше 4-х дней можно написать так:

Допустим у нас таблица Dates(date datetime)

select destinct dateadd(dd,n.i,d1.date) date
from Dates d1, (select 1 i union select 2 union select 3 union select 4) as n
where not exists(select * from Dates d2 where d2.date=dateadd(dd,n.i,d1.date))
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018432
Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо всем!!!
P.S.
Я тоже думал, откуда же мне взять даты которых в таблице нет...

2 SergSuper
За Ваш запрос огромное спасибо - интересная "штучка".
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018434
Timur Sokolov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как говорится, решение в лоб, но дешево, надежно и практично


use pubs
go

set nocount on

create table dates (date datetime)

insert into dates values('20010101')
insert into dates values('20010102')
insert into dates values('20010103')
insert into dates values('20010105')
insert into dates values('20010106')
insert into dates values('20010108')
insert into dates values('20010110')
insert into dates values('20010112')
insert into dates values('20010113')
insert into dates values('20010116')
insert into dates values('20010117')
insert into dates values('20010122')
insert into dates values('20010123')
insert into dates values('20010125')
insert into dates values('20010126')
insert into dates values('20010130')

select date
from dates
order by 1

create table #dates (date datetime)

declare @i datetime, @j datetime

select @i = min(date), @j = max(date)
from dates

while (@i < @j) begin

if not exists (select date from dates where date = @i)

insert into #dates values(@i)

Set @i = @i + 1
end

select * from #dates order by 1

drop table #dates
drop table dates

set nocount off
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018435
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае дата может отсутствовать или присутствовать по разным причинам. Если анализ этих причин не требуется, то все выше сказанное имеет смысл. Если же требуется отделить выходы на работу во внеурочное время (по выходным и праздникам) от выходов на работу по субботам и воскресеньям, на которые официально были перенесены отработки присоединенных к праздикам дней... Либо если требуется отделить невыход на работу по причине прогула от невыхода на работу в промежутке понедельник-пятница по причине праздника...
... То я в таких случаях завожу пару таблиц исключений из общего правила. В одной я коллекционирую субботы и воскресения, которые официально являются рабочими. В другую я заношу понедельники-пятницы, которые официально являются праздничными (не рабочими). Для полной картины можно еще завести таблицу с сокращенными рабочими днями.
Лично мне сокращенные рабочие дни не нужны. Я использую только две таблицы исключений, и с их помощью могу расчитать количество банковских дней между двумя любыми датами. не знаю, какая задача стоит у тебя.
...
Рейтинг: 0 / 0
Помогите, пожалуйста, составить запрос!!! :0(
    #32018477
Timur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Gary
Вы поделились со мной очень полезной информацией. Спасибо. Буду использовать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, составить запрос!!! :0(
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]