|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Не могу понять здесь рекурсия получается что ли? Просто в моем понимании как происходит: в первом селекте 1-й день месяца и название дня объединяется со вторым днем и назанием дня. А вот дальше что происходит? Зы: А где здесь форум по sql просто WITH CTE AS ( SELECT DATEADD(D,-DATEPART(D,GETDATE())+1,GETDATE())[FIRST SUNDAY DATE],DATENAME(DW,DATEADD(D,-DATEPART(D,GETDATE())+1,GETDATE()))[DAY NAME] UNION ALL SELECT DATEADD(D,1,[FIRST SUNDAY DATE]),DATENAME(DW,DATEADD(D,1,[FIRST SUNDAY DATE]))FROM CTE ) SELECT [DAY NAME] FROM CTE ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:27 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonickЗы: А где здесь форум по sql просто А простоSQL это СУБД новая? CTE рекурсивный. Возвращает вам список дат с названиями дней недели, начиная с первого числа текущего месяца. Сваливается по max recursion) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:31 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
* А где здесь форум по sql просто есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:31 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
авторНе могу понять здесь рекурсия получается что ли? Да, ибо CTE использует само себя же. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:32 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonick* А где здесь форум по sql просто есть? Это тот sql, который "просто СУБД" используют? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:33 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonick* А где здесь форум по sql просто есть? форума "просто sql" здесь нету http://ru.wikipedia.org/wiki/SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 16:57 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Отступления от стандартов Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL. (C) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 17:13 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
StarikNavyОтступления от стандартов Несмотря на наличие международного стандарта ANSI SQL-92 , многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL. (C)CTE, однако, появился в ANSI SQL-99 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 17:18 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Ааааа, мой мозг разрывается просто=) Спасибо за ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2013, 18:20 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
рекурсия в данном запросе бесконечная - надо как-нибудь ограничить или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
или еще как нибудь ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 07:05 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
LexusRили еще как нибудь Угу. MAXRECURSION hint. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 08:53 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
pkarklinLexusRили еще как нибудь Угу. MAXRECURSION hint. Этот хинт не предназначен для ограничения бесконечной рекурсии. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 08:56 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Гость333Этот хинт не предназначен для ограничения бесконечной рекурсии. Всмылсе?! Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 09:01 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Гость333pkarklinпропущено... Угу. MAXRECURSION hint. Этот хинт не предназначен для ограничения бесконечной рекурсии. То есть, конечно, сам по себе не предназначен. Без него не обойтись. Способ ограничения рекурсии до заданного уровня видится таким: Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 09:03 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
pkarklinГость333Этот хинт не предназначен для ограничения бесконечной рекурсии. Всмылсе?! Код: sql 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я имел в виду, что использование хинта самого по себе приводит к ошибке 530, а это плохо, если, скажем, код обёрнут в try-catch :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 09:07 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
А не подскажете, возможно ли как-то cte применить, чтобы получить количество понедельников, вторников, сред... воскресений месяца при заданной дате. Т.е.: data mon tue .... sun 1.02.2012 4 5 3 6.07.2011 3 4 5 Вот в таком ключе ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 13:06 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Maxx, а действительно... я было начал задумываться о мат.аппарате... А все проще - развернуть месяц по дням, для каждого дня вычислить номер дня недели, свернуть в count по дням недели - и никакой математики... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 13:40 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
ДА, такие же мысли, только не номер дня недели, а сразу название, потом соответсвенно выборку по дню и подсчет. Но я не понимаю вот есть столбец понедельник, вторник..воскресение - как его вывести? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 13:46 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonickdata mon tue .... sun 1.02.2012 4 5 3 6.07.2011 3 4 5 простите конечно,но как 1.02.2012 может содержать 4 понедельника,5 вторников и еще 3 воскресения ? Развернуть просто PIVOT (гаратированные 7 колонок, если у вас не собственный календарь ) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 13:50 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Maxx, месяц, в котором есть дата 1.02.2012 - может :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:11 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Cygapb-007, незнаю , может у них свой календарь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:17 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Cygapb-007, Pivot, это классно. Но ведь я получу только за один месяц. Как мне применить это к остальным месяцам? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:19 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
DATENAME - недетерминированная функция. Поэтому иногда её применить не получится. Лучше считать остаток от деления на 7 периода времени с 01.01.1900, выраженного в днях! 1 января 1900 был понедельником. Поэтому остаток, равный 0, означает "понедельник". Число 0 без проблем конвертируется именно в '1900'. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:19 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Во у меня какой календарь есть: Код: 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.
http://www.sql.ru/forum/519478/kalendar-nyneshnego-mesyaca Сейчас бы по-другому сделал... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:29 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonick, задачу-то сформулируйте хотя бы... полностью, а не с регулярными вводными :) в старттопике была генерация дней от начала текущего месяца до конца света, потом вопрос о количестве дней недели в текущем месяце, теперь выясняется, что месяцев несколько... что будет дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:30 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
ДЫ, просто задумка была как раз посчитать количество дней через CTE в месяце и сгруппировать их по дням недели, а потом pivot применить, но ведь у меня же еще месяц в зависимости от даты выбирается. А дат много. И нужно это все в таблицу вывести ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:35 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
boobonick, Вам ещё не посоветовали сделать постоянную таблицу с датами лет на сто? И таблицу с числами хотя бы от 0 до миллиона? Сделайте. Не пожалеете. Все подобные задачи станут элементарными. И сервер их обработает максимально эффективно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 14:38 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Чтобы понять рекурсию, нужно понять рекурсию :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 15:18 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
iap, а разве это не одна и та же таблица?? с учетом dateadd(d,number,<базовая дата>) persisted ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 15:41 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Cygapb-007iap, а разве это не одна и та же таблица?? с учетом dateadd(d,number,<базовая дата>) persisted ?Можно и одну. У меня вот обе есть. Проиндексированные. Чего тут экономить-то? К тому же в таблице с датами можно полезную информацию держать (праздник/не праздник, например) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 15:45 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Вот, набросал,но теперь вопрос, как мне это все связать с несколькими месяцами? Т.е., я передаю,соединяю несколько месяцев, а мне в ответ месяц и сумму всех дней недели этих месяцев Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2013, 18:39 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Т.е. примерно так должно быть: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2013, 18:41 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
в CTE генерируются все даты за один месяц - откуда второй строке взяться? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 09:16 |
|
Помогите понять CTE
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
YEAR_MONTH12345672013-0611122222013-0755544442013-081112221 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 10:15 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1705966]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 134ms |
0 / 0 |