|
|
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Есть таблица, в таблице одно из полей - Date_check типа "smalldatetime". Мне нужно добавить во временную таблицу #Temp1 все поля, но к значению Date_check нужно прибавлять, допустим 60 дней пока не закончится год, т.е. допустим, до 31.12.2003. Т.о. получится несколько записей относящихся к одному аппарату, но даты должны быть разные. Проще говоря, у каждого аппарата ремонт через каждые два месяца. И нужно хранить все даты его ремонта за год, т.к. впоследствие они могут корректироваться. Можно конечно с помощью курсоров попытаться пробежаться по всем записям, но для этого надо цикл делать, можно ли одним запросом сотворить подобное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 15:49:01 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
А чем цикл не устраивает? типа declare @from smalldatetime declare @to smalldatetime declare @step int declare @dt smalldatetime ------ .... ---- select @dt=@from while DateDiff(day,@dt,@to)>0 begin ...... select @dt=DateAdd(day,@step,@dt) end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 15:53:11 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Правильно ли я понял, что если есть исходная таблица: id Date_check ------------- ... 1 1 Aug 2002 ... то во временной должно быть: id Date_check ------------- ... 1 1 Aug 2002 1 1 Oct 2002 1 1 Dec 2002 ... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 15:55:54 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
to jimmers - cовершенно верно. Вы правильно поняли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:08:04 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
ИМХО, за один запрос без использования вспомогательной таблы(где будут опорные даты) и совсем без цикла - сомнительно.... А почему не годится declare @i int select @i = 1 while @i !> 12 begin insert into #Temp1 ............. select @i = @i + 1 end ??? Или есть заморочки какиенить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:16:46 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:19:21 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Дело в том, что 60 дней (т.е. 2 месяца) - это норматив для ремонта, это означает, что ремонт у всех аппаратов разный и прибавлять к дате нужно разное значение. Для каждого оно определено в соответствющем поле. Допустим поле Norma ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:27:34 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
DATEADD, DATEDIFF, DATEPART.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:38:50 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Для ненавидящих временные таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 16:48:23 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
IMHO в одном запросе никак не сделать - для каждой записи в исходой таблице может быть любое число записей в выходной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 17:00:03 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Да, если для каждого аппарата разные периоды, то так нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 17:58:18 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
А вот и можно, через UDF Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 18:36:11 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
2akuz: Один запрос - это один запрос. Вы просто вынесли в UDF тот же цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 18:40:50 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял, то я бы сделал так (ничего нового я не предлагаю, просто реализую предложенные идеи): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Основное время здесь займёт заполнение таблицы @millenium числами от 0 до 999. У меня есть такая постоянная таблица, чего я и Вам желаю сделать - еще может пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 18:45:59 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
2 jimmers Не спорю, но зато его не надо каждый раз в процедурах писать. И, помоему, на функции ещё какая-никакая оптимизация работает. Хотя если развивать идею, то можно создать постоянную таблицу calendar заполнив её используя предлагаемый UDF. Хотя лично у меня на рабочей станции данный UDF выдаёт сто летний диапазон за 4 сек., поэтому использовать постоянную таблицу смысла нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 19:02:17 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Можно и одним запросом, только надо создать вспомогательную таблицу. В этой таблице должно быть поле типа Int, содержащее последовательность от 1 до 366 и поля параметров, которые впоследствии предполагается редактировать. Приведенный ниже запрос создает нужную выборку, начиная с указаной в "главной" таблице даты и до конца года Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2002, 19:25:06 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за ответы!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2002, 09:15:37 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
Я не панимаю, почему все ТАК заполняют таблицы с последовательностью чисел: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Лучьше-то без цикла: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2002, 14:14:50 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
2alexeyvg: 1. Ваш запрос не будет работать, т.к. одной из таблиц необходимо назначитт алиас. 2. Нет гарантии, что число записей в опрашиваемых достаточно. Кстати, это же свойственно все решениям из серии "создать впомогательную таблицу" - число записей в ней неизвестно (в общем случае), хотя для практичеких задач вполне можно определить. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2002, 14:28:33 |
|
||
|
Можно и без курсоров, наверное...
|
|||
|---|---|---|---|
|
#18+
назначит(ь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2002, 14:29:31 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32057150&tid=1819676]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 492ms |

| 0 / 0 |
