Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, составить SQL-запрос по дням(без выходных) / 18 сообщений из 18, страница 1 из 1
29.10.2002, 11:45:57
    #32062616
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных). Очень нужно.

Как одним запросом выбрать промежуток дней, исключая
выходные(субботу, воскресенье)?

Промежуток дней(выбирается пограммно) например:
10.01.2002 00:00 по 10.07.2002 23:00(исключаются 10.05.2002,10.06.2002-суббота, воскресенье),
10.01.2002 00:00 по 10.31.2002 23:00(исключаются субботы, воскресенья в нем) и т.д.

Используется такой запрос:

select a_data_general.device ,
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end),
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end),
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end)
from a_data_general,a_por
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats) and (dt>='10.01.2002 9:00')
and (dt<='10.07.2002 18:00')
group by a_data_general.ats,a_data_general.device,a_por.mar

Как используя его исключить выходные дни?
...
Рейтинг: 0 / 0
29.10.2002, 11:51:22
    #32062626
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Достаточно использовать функцию
DATEPART(wk, date) , который возвращает день недели
...
Рейтинг: 0 / 0
29.10.2002, 12:01:56
    #32062635
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
А как же это сделать в данном запросе?
...
Рейтинг: 0 / 0
29.10.2002, 12:05:41
    #32062637
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
кстати есть методика определения статуса дня в зависимости от дня недели, праздничных дней и всевозможных переносов рабочих дней на выходные

если интересует скину скрипты
...
Рейтинг: 0 / 0
29.10.2002, 12:10:14
    #32062641
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Скиньте если возможно по адресу r500@rambler.ru.
Если можно, продемонстрировать на данном запросе
...
Рейтинг: 0 / 0
29.10.2002, 12:12:05
    #32062643
Dmitri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Код: plaintext
1.
SELECT /.../
WHERE /.../ AND DATEPART(wk, /дата/) NOT IN ( 6 , 7 )


если язык соединения US English то первый день недели воскресенье, поменять можно при помощи
Код: plaintext
SET DATEFIRST  1 
...
Рейтинг: 0 / 0
29.10.2002, 12:35:45
    #32062653
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
сорри, скриптик потерялся.

напишу попозже -скину.
принцип был таков:

таблица хранящая даты переноса выходных на будни и будней на выходные состоит из одного поля типа датетиме, хотя наверное лучше сделать его типа int.


определение статуса дня выполнено в виде хранимой процедуры. входной параметр - дата - выход истина или ложь.

если дата указана в таблице то результат определения выходного дня по принципу суббота-воскресенье - истина
инвертируется.

в твоем случае не вижу другого способа кроме как как сделать такую процедуру и пробежать по интересующему периоду курсором.
...
Рейтинг: 0 / 0
29.10.2002, 12:42:44
    #32062665
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Пишу запрос

select a_data_general.device ,
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end),
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end),
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end)
from a_data_general,a_por
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats)
and (dt >= '20021007 00:00:00')
and (dt <= '20021014 23:59:59') and datepart(hh, dt) >= 1
and datepart(hh, dt) < 23 and datepart(hh, dt) NOT IN (1,7)
group by a_data_general.ats,a_data_general.device,a_por.mar

ничего не меняется с datepart(hh, dt) NOT IN (1,7) и
даже datepart(hh, dt) NOT IN (3,7). Может быть где-то
ошибка
...
Рейтинг: 0 / 0
29.10.2002, 12:48:36
    #32062666
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Функция DATEPART для возврата дня недели в своим первым параметром должен имет значение wk
( от слова week ) и ты его не должен менять.
А второй параметр - дата
...
Рейтинг: 0 / 0
29.10.2002, 12:49:11
    #32062667
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
1 DATEPART(wk, list_of_dates )



2. список дат твоего временного промежутка нужно построить во временной таблице или курсоре
...
Рейтинг: 0 / 0
29.10.2002, 12:53:09
    #32062668
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
я недосмотрел... ))

у тебя уже есть дата


datepart(wk, dt)
...
Рейтинг: 0 / 0
29.10.2002, 12:57:09
    #32062669
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Можно на данном запросе, а то я пока не соображу.
...
Рейтинг: 0 / 0
29.10.2002, 13:00:26
    #32062670
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a_data_general.device , 
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end), 
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end), 
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end) 
from a_data_general,a_por 
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats) 
and (dt >= '20021007 00:00:00') 
and (dt <= '20021014 23:59:59') and datepart(hh, dt) >=  1  
and datepart(hh, dt) <  23  and datepart(wk, dt) NOT IN ( 1 , 7 ) 
group by a_data_general.ats,a_data_general.device,a_por.mar 
...
Рейтинг: 0 / 0
29.10.2002, 13:01:35
    #32062671
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Использование запроса:

select a_data_general.device ,
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end),
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end),
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end)
from a_data_general,a_por
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats)
and (dt >= '20021007 00:00:00')
аnd (dt <= '20021014 23:59:59') and datepart(wk, dt) NOT IN (1,7)
group by a_data_general.ats,a_data_general.device,a_por.mar

,тоже не помогает
...
Рейтинг: 0 / 0
29.10.2002, 13:05:59
    #32062673
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
Пробовал написанный вами запрос:

select a_data_general.device ,
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end),
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end),
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end)
from a_data_general,a_por
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats)
and (dt >= '20021007 00:00:00')
and (dt <= '20021014 23:59:59') and datepart(hh, dt) >= 1
and datepart(hh, dt) < 23 and datepart(wk, dt) NOT IN (1,7)
group by a_data_general.ats,a_data_general.device,a_por.mar

выдает один и тот же результат для NOT IN (1,7) ,
NOT IN (3,7) и т.д.
...
Рейтинг: 0 / 0
29.10.2002, 13:19:33
    #32062678
alk
alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
для отладки добавь уровень группировки - DT
и посмотри в результате свои переменные по датам.
у тебя либо данные одинаковые либо формула неверна.

например так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select dt, a_data_general.device , 
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end), 
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end), 
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end) 
from a_data_general,a_por 
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats) 
and (dt >= '20021007 00:00:00') 
and (dt <= '20021014 23:59:59') and datepart(hh, dt) >=  1  
and datepart(hh, dt) <  23  and datepart(wk, dt) NOT IN ( 1 , 7 ) 
group by dt, a_data_general.ats,a_data_general.device,a_por.mar 
...
Рейтинг: 0 / 0
29.10.2002, 13:23:21
    #32062680
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
DATEPART(wk - возвращает номер недели
а DATEPART(dw - возвращает номер дня недели

Код: plaintext
1.
2.
3.
set datefirst  1 
select datepart(dw, crdate) 
from sysobjects a
group by datepart(dw, crdate) 
...
Рейтинг: 0 / 0
29.10.2002, 14:28:44
    #32062724
rom900
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите, пожалуйста, составить SQL-запрос по дням(без выходных)
А обязательно ли использовать:
set datefirst 1
select datepart(dw, crdate)
from sysobjects a
group by datepart(dw, crdate)

,так как запрос работает
select a_data_general.device ,
R0=(case when (a_data_general.ats='11')then (Count(a_data_general.ats)/a_por.mar) end),
R1=(case when (a_data_general.ats='01')then (Count(a_data_general.ats)/a_por.mar) end),
R2=(case when (a_data_general.ats='21')then (Count(a_data_general.ats)/a_por.mar) end)
from a_data_general,a_por
where (a_data_general.device=a_por.device) and (a_data_general.ats=a_por.ats)
and (dt >= '20021007 00:00:00')
and (dt <= '20021014 23:59:59') and datepart(hh, dt) >= 1
and datepart(hh, dt) < 23 and datepart(dw, dt) NOT IN (1,7)
group by a_data_general.ats,a_data_general.device,a_por.mar

Всем большое спасибо за помощь.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите, пожалуйста, составить SQL-запрос по дням(без выходных) / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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