|
|
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Что-то я совсем запутался. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Пробуем узнать, есть ли завтра причина для пьянки: Код: sql 1. 2. 3. 4. 5. Хм. Не то. А если Код: 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. Уже лучше, но я не уверен, что я все проверки сделал правильно и учел все нюансы с датами. И вообще, может есть более простой/правильный путь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:36:15 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:39:46 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
m7m, На приведенных в первом посте данных для сегодняшнего дня видает NULL. Еще идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:41:39 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
а зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:46:32 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlinem7m, На приведенных в первом посте данных для сегодняшнего дня видает NULL. Еще идеи? ууу, я протупил, по поводу сути задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:50:31 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, ну что то вот такое (Месяц(current_date+1) = месяц(mem_date) and День(current_date+1) = День(mem_date)) или (месяц(mem_date) = 2 and День(mem_date) = 29 and Месяц(current_date+1) = 3 and День(current_date+1)=1 and not ( Месяц(current_date+1) = 2 и День(current_date+1)=29)) если родившихся 29 февраля будут "обмывать" 1-го марта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:08:58 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
arniа зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. Один день на четыре года можно и пропустить. Хотя, конечно, нежелательно - там у меня как раз племянник родился :) Геморой с yearday потому, что на тот момент это было первое что пришло в голову. Спасибо за идею, запрос с этажерки в первом посте сократился до Код: sql 1. 2. 3. 4. 5. 6. //Пошел прогонять его на всех возможных датах для поиска ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:14:59 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
m7m, Да, спасибо - как раз на 29 февраля мой запрос и будет сыпаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:19:27 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Вот такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. у меня правильно переварил все даты, которые я ему подсунул. Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:24:24 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, если хотите ускориться, тогда вычисляйте однократно extract(month from dateadd(1 day to current_date)) и extract(day from dateadd(1 day to current_date)) и передавайте в качестве переменных. а то мой склероз шепчет, они будут вычисляться для каждой строки вновь и вновь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:40:48 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
arniа зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. Прощее - сделать поле "MMDD" с индексом и не морщить ни кому голову: ни себе, ни серверу... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:46:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineВот такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. у меня правильно переварил все даты, которые я ему подсунул. Всем спасибо :) и в высокосный год, родившиеся 29-го февраля будут праздновать день рождение два дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 18:50:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, Ещё раз извиняюсь, продублировал теперь здесь. Выборка персонала, с днём рождения в ближайшие 20 дней Код: sql 1. 2. 3. 4. Родившихся 29 февраля сей запрос отработал нормально, специально проверил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 10:42:43 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Ну ее, эту тему... Модератор: Удалено. У нас технический форум, религиозные аспекты мы не рассматриваем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:05:54 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
zeon11miwaonline, Ещё раз извиняюсь, продублировал теперь здесь. Выборка персонала, с днём рождения в ближайшие 20 дней Код: sql 1. 2. 3. 4. Родившихся 29 февраля сей запрос отработал нормально, специально проверил Для исполнения запроса в високосный год 365 заменить на 366, если лениво вспоминать, какой нонче год, то для определения количества дней в году выполнить запрос, предложенный в своё время KDV 3989390 : Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2013, 19:47:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Хорошая задачка :) У меня вот такое получилось для сегодняшних (для завтрашних CURRENT_TIMESTAMP сменить на DATEADD(1 DAY TO CURRENT_TIMESTAMP). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Ценой джойна временных переменных условия запроса сокращены до удобочитаемого вида ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 17:20:45 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
В решении предложенном zeon11 содержится ошибка: нумерация дней для высокосных и не выскосных годов не будут совпадать на 1 день из-за 29 февраля. По этой причине пришлось изобретать свой велосипед. Необходимо было найти именинников в указанном периоде (!!!), а не за 1 день. Ключевым приёмом в решении было вычисление "магического числа": номер месяца рождения * 100 + число рождения. Аналогичные преобразования были сделаны для интервала и таким образом в условии where для большинства случаев получаем условие "MagicNumber between IntervalStart and IntervalEnd". Отдельно нужно обрабатывать случай перехода интервала на следующий год, тогда: IntervalStart > IntervalEnd and (MagicNumber >= IntervalStart or MagicNumber < = IntervalEnd). Дата дня рождения вычисляется путём добавления к дате рождения разницы в годах между последней и текущим годом. Однако если IntervalStart > IntervalEnd /* переход интервала на след. год */ and MagicNumber <= IntervalEnd, то нужно добавить ещё годик. Готовый запрос не даю, дабы была возможность пошевелить мозгами самостоятельно... А может и потому, что запрос писался для MS SQL и переделывать под синтаксис FireBird нет желания. P.S. MS SQL позволяет создать MagicNumber как вычисляемое поле с построением индекса по нему, что позволит сделать запрос эффективным на больших объёмах данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 11:18:36 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Konstantin.OgorodovP.S. MS SQL позволяет создать MagicNumber как вычисляемое поле с построением индекса по нему, что позволит сделать запрос эффективным на больших объёмах данных.ФБ тоже. Более того, можно сделать индекс по выражению и не хранить калькулируемое поле вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 15:38:03 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Konstantin.Ogorodov, корректно работает в случае, если год рождения был високосным? P.S. Что за всеобщая эпидемия написания слова "високосный" через Ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 16:33:45 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalP.S. Что за всеобщая эпидемия написания слова "високосный" через Ы? А это привет с Украины ;) У нас это слово читается и пишется как «вЫсокосный» (украинская «и» по звучанию еквивалентна русской «ы»), соответственно так и «переводим» на братский язык (отталкиваясь от слова «высокий»). Так что это слово можно считать таким себе индикатором украинцев :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 18:00:21 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, ну так и пишите это слово "по-украински" :) Хотя, тогда получится "високосн и й"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 18:59:18 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
"Как узнать завтрашних именинников?" Кто может задать этот вопрос и кому ответ на него нужен? Очевидно, что этот вопрос актуален для людей кадровой службы, опасающихся пропустить день рождения сотрудников, не отметив уважаемых людей в приказе по учреждению и т.п. 20 дней запаса - срок, за который можно подготовится к любому событию. Будет-ли сотрудник в списке 19 дней или 21 не столь важно, главное, что он всё это время будет в списке и его точно поздравят вовремя. Городить трёхэтажный запрос ради формальной правильности - это конечно дело вкуса, но тогда следует уж идти до конца и учитывать, что високосный год это год, номер которого кратен четырём, за исключением годов, кратных 100, но года кратные 400 по-прежнему будут високосными. Иными словами, 2000 год високосный, 2100, 2200, 2300 - не високосные, 2400 - високосный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:02:35 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Все это легко организовывается через "рабочий календарь", разложенный на дни и месяцы. Но там обычно еще есть и кварталы, выходные, рабочие, праздничные дни и т.п. Штука полезная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:24:01 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
zeon11, Поскольку инициатор вопроса - я, то мне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения. Так что о 20 днях ожидания и формальной правильности речь (в моем случае) не идет. Так же как и о именинниках в 2100 году - меня этот вопрос тоже вряд ли будет волновать :) Поэтому и рабочий календарь, предложенный wadman-ом мне также не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:44:26 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineПоэтому и рабочий календарь, предложенный wadman-ом мне также не подходит. Причина и следствие не понятны. Что такое "рабочий календарь" тебе известно? П.С. Можно и нужно на "ты", мне так проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:46:28 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=107&tid=1564056]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 371ms |

| 0 / 0 |
