|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
что-то не соображу, как полегче сгенерить запросом все вторники от одной даты до другой? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2021, 22:43 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Если "на проклятом острове нет календаря", то можно так: 1. Выписываешь все числа от дата1 до дата2, включая эти даты 2. Двигаясь от даты1 к дате2 находишь первый вторник и отмечаешь его кружком. 3. Двигаясь от найденного вторника к дате2 отмечаешь кружком каждую 7-ю дату 4. Выписываешь отмеченные кружком даты ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2021, 23:27 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
newbie876454, достаточно найти разницу между днём недели указанной даты и вторником, прибавить 7 * N для других вторников. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 00:54 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
newbie876454 что-то не соображу, как полегче сгенерить запросом все вторники от одной даты до другой? Тупо, брутально, в стиле "идите на ...й", неоптимально. ... Чтобы только полюбоваться на охреневшую физиономию того, кто будет делать код-ревью. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
:-)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 08:37 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
uaggster, это случаем не твоя функция получения завтрашней даты? Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 08:52 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
andy st uaggster, это случаем не твоя функция получения завтрашней даты? Код: sql 1. 2. 3.
Опа! ... в копилку... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 08:54 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
uaggster newbie876454 что-то не соображу, как полегче сгенерить запросом все вторники от одной даты до другой? Тупо, брутально, в стиле "идите на ...й", неоптимально. ... Чтобы только полюбоваться на охреневшую физиономию того, кто будет делать код-ревью. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
:-)))) Офигенно! И ведь будет работать! Главное ведь в коде что? Предсказуемость результатов! :) А прибавление по одному дню - это самое надёжное, что может быть! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 12:22 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 12:24 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
a_voronin 1. Выше моё сообщение - это была шутка... 2. Ну вы даёте. Я конечно тоже было дело генерировал последовательность дат, но там был просто типа массив с одним полем и небольшим диапазоном. А вот чтобы ТАК... ооо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 12:59 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
a_voronin круто, но тут еще нету вариантов, когда месяц может начинаться 1 числа в 8 утра или 26 числа предыдущего месяца. а некоторые конторы умудряются в разных подразделениях делать отчётность двумя способами (больше не видел) и в эксельках за большие интервалы времени у них будет сходиться до знаков после запятой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 13:21 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
a_voronin Наш человек! Кстати, я поступил ровно также. Только круче, просто нагенерировав таблицу примерно аналогичного формата с 01.01.1900 по 31.12.2100, и горя не знаю. Проставив там сразу "первое число месяца", "последнее число месяца", "первый понедельник месяца", "рабочий день" (Кстати, кому надо, беру вот отсюда: https://data.gov.ru/opendata/resource/8ba5011a-233e-4e01-a1d2-ff5598d0f34f#2/0.0/0.0 И прямо из csv проставляю: Код: 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. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
, предыдущий день, следующий рабочий день, и тому подобные поля. И таскаю с собой в "служебной" бд, по всем серверам организации. Ну, восстанавливаю из единого источника периодически. Дошло до того, что программеры считают, что она в комплекте идет с MSSQLSERVER, а обновляется не иначе, как святым духом. Недавно звонил сисадмин из конторы, куда перебралось парочка наших разрабов, они ему плешь проели, что он MSSQLSERVER им "в усеченном виде поставил, не все служебные базы поставил" и требовали дополнительный пак скачать и установить. :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 14:58 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
uaggster Дошло до того, что программеры считают, что она в комплекте идет с MSSQLSERVER, а обновляется не иначе, как святым духом. Недавно звонил сисадмин из конторы, куда перебралось парочка наших разрабов, они ему плешь проели, что он MSSQLSERVER им "в усеченном виде поставил, не все служебные базы поставил" и требовали дополнительный пак скачать и установить. :-))) Кстати вполне разумная мысль, подумал об этом же, что мс серверу иметь такую готовую таблицу из коробки и штатные средства её заполнения было бы полезно. Ибо используется много кем, да почти что всеми. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:07 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
у меня похожий вопрос, только для четвергов... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:09 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
svb2018 у меня похожий вопрос, только для четвергов... Двойку на четверку поменять - не судьба? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 15:59 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Кесарь uaggster Дошло до того, что программеры считают, что она в комплекте идет с MSSQLSERVER, а обновляется не иначе, как святым духом. Недавно звонил сисадмин из конторы, куда перебралось парочка наших разрабов, они ему плешь проели, что он MSSQLSERVER им "в усеченном виде поставил, не все служебные базы поставил" и требовали дополнительный пак скачать и установить. :-))) Кстати вполне разумная мысль, подумал об этом же, что мс серверу иметь такую готовую таблицу из коробки и штатные средства её заполнения было бы полезно. Ибо используется много кем, да почти что всеми. Ты не поверишь, но в учебной стандартной AdventureWorksDW базе уже есть DimDate календарь, заполненный со всем что надо. авторCREATE TABLE [dbo].[DimDate]( [DateKey] [int] NOT NULL, [FullDateAlternateKey] [date] NOT NULL, [DayNumberOfWeek] [tinyint] NOT NULL, [EnglishDayNameOfWeek] [nvarchar](10) NOT NULL, [SpanishDayNameOfWeek] [nvarchar](10) NOT NULL, [FrenchDayNameOfWeek] [nvarchar](10) NOT NULL, [DayNumberOfMonth] [tinyint] NOT NULL, [DayNumberOfYear] [smallint] NOT NULL, [WeekNumberOfYear] [tinyint] NOT NULL, [EnglishMonthName] [nvarchar](10) NOT NULL, [SpanishMonthName] [nvarchar](10) NOT NULL, [FrenchMonthName] [nvarchar](10) NOT NULL, [MonthNumberOfYear] [tinyint] NOT NULL, [CalendarQuarter] [tinyint] NOT NULL, [CalendarYear] [smallint] NOT NULL, [CalendarSemester] [tinyint] NOT NULL, [FiscalQuarter] [tinyint] NOT NULL, [FiscalYear] [smallint] NOT NULL, [FiscalSemester] [tinyint] NOT NULL, CONSTRAINT [PK_DimDate_DateKey] PRIMARY KEY CLUSTERED ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2021, 17:00 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Вопрос был о вторниках. Я привел способ нахождения вторников, который в математике называется решетом, и известный нам еще со школы. Авторство этого способа приписывают древнегреческому математику Эратосфену. Этот способ им был использован для нахождения простых чисел. https://ru.wikipedia.org/wiki/Решето_Эратосфена В этой статье приведена анимационная картинка, демонстрирующая работу этого способа. Очень наглядно! Все шаги, кроме шага 2, выполняются механически, поэтому этот способ часто называют алгоритмом. В пункте 1 я оговорился, написав "число", хотя речь идет о датах. Наверно, мысли были уже о реализации этого способа для вторников. Привели два варианта решения задачи нахождения вторников, которые детализируют этот способ, причем второй вариант доведен до реального запроса. Кесарю этот запрос очень понравился, но когда он увидел календарь Воронина, сразу отрекся! И началось соревнование представителей островов, у кого длиннее календарь, в смысле у кого в нем больше всякой всячины, нужной и не очень нужной. Особенно поразила таблица DimDate из AdventureWorksDW: в ней название дня недели и на английском, и на испанском, и на французcком. Все, что надо для нашей глубинки! Но наличие календаря с нужными для нас данными не отменяет вопрос, как всё-таки сгенерировать эти очень нужные нам вторники? Потом, если задача со вторниками регулярная, то почему бы не сделать для них отдельную таблицу вторников? Трансформируем способ решета в запрос получения вторников начиная с 2021 года и лет так на 90: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Результат: 2021-07-06 2021-07-13 2021-07-20 2021-07-27 '20201229' – вторник, который непосредственно предшествует нужному нам диапазону вторников (пункт 2). Запросы l0, l1, l2 формируют нужный нам числовой ряд (пункт 1). Запрос r обводит кружком интересующие нас точки этого числового ряда (пункт 3). Запрос D выписывает даты, соответствующие обведенным кружкам нашего числового ряда (пункт 4). Рекурсивная версия: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
" Вроде не бездельники и могли бы жить Им бы вторники взять и отменить …" Да, вторники здесь ни при чем, скорее Эратосфен с его решетом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 11:38 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 12:39 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
andy st uaggster, это случаем не твоя функция получения завтрашней даты? Код: sql 1. 2. 3.
первая строка Код: sql 1.
иначе функция "завтрашней даты" неправильна ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 13:35 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
komrad andy st uaggster, это случаем не твоя функция получения завтрашней даты? Код: sql 1. 2. 3.
первая строка Код: sql 1.
иначе функция "завтрашней даты" неправильна нинада "ля-ля" результирующая дата в любом случае будет "завтрашняя" про время в постановке задачи не было ничего ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 13:52 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Я уже начал волноваться, почему iap до сих пор не привел решение с формулой дня недели, не зависящей от настроек сервера? Спасибо, я успокоился. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 13:54 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Wlr-l Я уже начал волноваться, почему iap до сих пор не привел решение с формулой дня недели, не зависящей от настроек сервера? Спасибо, я успокоился. Я там тоже писал... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 16:41 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 17:12 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Посетитель, интересное решение. Получилось немного усовершенствовать :) set statistics time on говорит что так быстрее работает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 18:55 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
spenov, чтобы усовершенствовать, лучше взять номера из готовой таблицы, а не генерить на лету. а в вашей рекурсии по умолчанию есть ограничение на 100 вторников, которое, впрочем, несложно убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 19:12 |
|
Cгенерить все вторники в заданном диапазоне
|
|||
---|---|---|---|
#18+
Посетитель, рекурсия рассчитает дату 100 раз (ну или сколько требуется), а ваш запрос выполнит столько раз, сколько строк в таблице. а потом отберет те даты, которые попадают в диапазон. вычислений больше. разве не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2021, 19:16 |
|
|
start [/forum/topic.php?fid=46&fpage=20&tid=1684533]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
108ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 205ms |
0 / 0 |