Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Есть таблица в которой перечисленны все дни на несколько лет. Пользователь сам отмечает в этом календаре выходные и праздничные дни. Имеем текущую дату, необходимо получить, например, дату через 10 РАБОЧИХ дней. Я решил это через SP: --------------- set @ND=10 set @Dt='10.01.02' set@q = 'insert #D select max(Date_) from Calendar where Date_ IN ( Select top ' + @ND + ' Date_ From Calendar where Work_=255 and Date_ > ''' + @Dt + ''' order by date_)' Exec (@Q) ---------------- Далее, в другой SP, эта дата извлекается из #D Хотелось бы перенести это в UDF, которая возвращала бы нужную дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 07:08 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Принцип такой: находим дату, большую заданной, для которой количество таких записей равно требуемому числу дней. Звучит несколько путанно, в SQL это должно выглядеть так: select @result=t1.date_ FROM Calendar t1 join Calendar t2 on t2.date_<t1.date_ where t2.date_>=@Dt and t2.work_=255 and t1.work_=255 group by t1.date_ having count(*)=@ND ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 08:13 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Вот блин, РАБОТАЕТ! Но очень медленно, "having count(*)" - жутко тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 09:24 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
количество перебираемых значений можно сократить если учесть что в среднем количество рабочих дней равно 5/7 от количества календарных. Если поставить дополнительные условия по датам, это должно сильно ускорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 14:03 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Я бы в данном случае использовал ненавидимый мною курсор. Просто тупо отсчитал бы нужное количество дней, пропуская выходные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 19:31 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Я бы в данном случае использовал ненавидимый мною курсор. Просто тупо отсчитал бы нужное количество дней, пропуская выходные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 19:31 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
2 AlexanderVS: Если Вам удастся: 1. Добавить в таблицу индексированное поле с монотонно возрастающим значением. 2. Корректно вести его. Например, с помощью хранимой процедуры. То запросы будут "летать": select date_ from calendar where Id = (select Id from calendar where date_ = @дата) + @количество_дней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2002, 14:06 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
2MadDog ------------------------------------------------------- select date_ from calendar where Id = (select Id from calendar where date_ = @дата) + @количество_дней ------------------------------------------------------- Чегой то я не въезжаю, объясни плиз, а как тогда таким запросом праздничные и выходные дни обойти, ведь мне нужны ТОЛЬКО РАБОЧИЕ ДНИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 09:34 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Попытаюсь объяснить за MadDog(во всяком случае как я понял его идею) В таблице Calendar добавляется еще одно поле(Х) - количество рабочих дней от какой-то определённой даты(например от вашего дня рождения). Это поле высчитывается каждый раз когда добавляется новая запись. У нерабочих дней там ставиться null. Чтобы узнать какая дата будет через N рабочих дней, надо взять значение поля Х для заданной даты, прибавить N и найти запись с полученным значением у поля Х. Дата у этой записи и будет искомой датой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 10:36 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Либо я ничего не понимаю, но у меня получается так declare @nd int, @dt datetime, @mysql nvarchar(4000) set @ND=10 set @Dt='20020301' set @mysql = N'SELECT MAX(date_) AS newdate FROM(SELECT TOP '+CAST(@nd AS varchar)+ ' date_ from calendar a where a.work_ = 255 and a.date_ > ''' +CONVERT(varchar, @dt, 112)+''' order by date_) AS a' exec(@mysql) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 11:05 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Господа, прошу прощения. Я выслал недоделанное сообщение. Перед тем как сделать preview first скопировал тест, но, похоже, не весь. У меня ДВЕ таблицы, одна - весь календарь, другая - только рабочие дни. "индексированное поле с монотонно возрастающим значением" находится во второй таблице. Под фразой "Корректно вести его" я подразумевал синхронизацию этих таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 11:45 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Господа, господа, Вы уклоняетесь от темы Во первых у меня и так все работает в SP при наличии одной таблицы - посмотрите начало топика Во вторых то что предложил уважаемый Glory - те же яйца, только в профиль. Я имею в виду в конечном счете EXEC(@mysql) В третьих я просто хотел перенести код SP в UDF, поэтому EXEC(@mysql) тут не проходит. Но все равно - спасибо за ответы! ЗЫ А вот еще можно попутно узнать: я часто слышу термин - "переодическое обновление индекса", а как это делается я почему то не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 14:20 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Уточню на всякий случай Вам нужно именно UDF или возможность вернуть из динамического запроса значение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 14:53 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Ну а насчет "те же яйца, только в профиль". Сравните, если интересно, планы выполнения вашего и моего запросов - увидите в чем различие. Хотя на такой маленькой таблице конечное время обеих запросов различается мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2002, 15:05 |
|
||
|
Как отсчитать несколько рабочих дней от текущей даты
|
|||
|---|---|---|---|
|
#18+
Уважаемый товарисч Glory !!! Я ни в коем случае не хотел Вас обидеть сравнив Ваш пример со своим. ОНИ РАЗНЫЕ! И скорее всего, Ваш код быстрее и оптимальнее. Но реализация его через EXEC(@sql) - в UDF не проходит, а я хотел именно UDF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2002, 02:17 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32021089&tid=1824256]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 374ms |

| 0 / 0 |
