|
|
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Около Extension: 369 всегда стоит звездочка — подтверждает, что это "трансфер звонка". Задача: 369 поменять на номер Extension, у которого совпадает CO и Number, причем он должен быть а) выше по списку б) первый совпавший То есть в примере надо заменить 369 во второй строке на 104, в шестой строке на 108, а в восьмой — не менять вовсе. Возможно ли это сделать одним запросом? Естественно, хочется избежать функций типа Iif, чтобы ускорить процесс. Платформа — Acc'XP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 15:33:02 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Как всегда - в таких задачах мой первый вопрос Как определяется порядок строк (упорядочивающий критерий есть?) Т.е. в вашем примере первая строка не отличается от второй (пардон) ни чем Как Акс должен определить какая строка "выше" Сразу предупрежу ваш ответ - типа: порядок строк определяется порядком их появления в таблице (дык - это не есть правильный ответ, ибо мы этим воспользоваться не можем, впрочем так же как и Акс) Вам надо либо упорядоченный счетчик иметь или дату, по которым и будем определять, что выше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 15:46:20 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
порядок строк определяется порядком их появления в таблице — я так и не собирался говорить Скажем так — в процессе конвертации данных из текстового файла добавлю к ней поле Counter. Хотя, когда пример писал, имел в виду сортировку по полю iDate (datetime) — но почему-то не включил в пример. бес попутал... Да собсно, все равно. Будем считать что поле для однозначной сортировеки есть, пусть будет Counter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:11:54 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Т.е. в результате должно быть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:16:39 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
нет, должно остаться без изменений Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:22:41 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
SELECT ... FROM tabl t1 LEFT JOIN tabk t2 ON t1.CO=t2.Co AND t2.Transfer IS NULL AND t1.Transfer="*" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:27:56 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
update t inner join t AS t1 on (t.number = t1.Number) AND (t.CO = t1.CO) AND (t.Extension <> t1.Extension) set t.Extension = t1.Extension where t.Transfer="*"; Только тут я беру первый попавшийся, а не первый по списку. А обязательно первый по списку? ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:32:38 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
VictoshaSELECT ... FROM tabl t1 LEFT JOIN tabk t2 ON t1.CO=t2.Co AND t2.Transfer IS NULL AND t1.Transfer="*" 1) это было без условия на номер. 2) Выше по списку - надо бы "нумеровать" чем-то в итоге что надо - выборка или update исходной таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:35:57 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
обязательно... на этом и загвоздка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:36:13 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
авторВыше по списку - надо бы "нумеровать" чем-то Добавили же поле Counter? чтоб по нему сортировать. Нужен именно Update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:37:57 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
может быть? Geoupdate t inner join t AS t1 on (t.number = t1.Number) AND (t.CO = t1.CO) AND t1.counter IN (Select MIN(counter) From t as t3 WHERE (t3.number = t1.Number) AND (t3.CO = t1.CO) AND AND t3.Transfer IS NULL AND (t.Extension <> t1.Extension) ) set t.Extension = t1.Extension where t.Transfer="*"; <///>;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:43:58 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Cо вложенными он ругается на "обновляемый запрос". Не могу обойти. На ум приходит только двойной dlookup но это совсем плохо. М.б. все-таки какая-нибудь временная таблица?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:48:49 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
у тебя ругается, а у меня вообще вылетает с приветом Биллу... сервиспаки стоят. Да и потом, есть у меня ощущения, что запрос поменяет все "трансфер=*" на первый найденный правильный екстеншн. Или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:00:34 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Да нет, зачем же... Сейчас dmin/dlookup попробую, но, имхо, лучше посредством доп. таблицы/записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:11:32 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Ладно, тогда буду дополнительные таблицы ваять. Спасибо всем откликнувшимся! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:14:47 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Погоди, вот: UPDATE t, t as t1 SET t.Extension = t1.extension WHERE t.Transfer="*" AND t1.cntr=nz(DMin("cntr","t","co=" & t.CO & " and len(nz(Transfer))=0 and number='" & t.number & "'"),0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:16:53 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
, где cntr - счетчик, а number - текстовое поле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:19:34 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
маленький ап как можно это еще и убыстрить? дело в том, что я человек, так сказать, измученный нарзаном. Устал ждать на ~100 записей — ~ 3 секунд на ~8000 записей (смешно сказать) — не знаю сколько секунд, ни разу не смог дождаться... что такое индексы, я не знаю, но предполагаю, что надо сделать какие-то поля индексированными. Так ли это? и если да, то какие? В данный момент индексированы поля Код (cntr в примере Geo), Extension, transfer и number Кстати, действует ли индексированность на скорость работы DMin? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 13:10:44 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
А можешь на мыло прислать мне тестовую табличку записей на 1000-5000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 16:05:35 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Конечно, только в понедельник — в Астане рабочий день закончился. Спасибо заранее. Кстати, оставляю запрос выполняться на сервере, на все выходные. //Знали бы вы, какой каторжный труд делать это все вручную! //Нуф-style comment ©Непомнючьё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 16:42:12 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Попробуй обрезать количество записей в произведении (до WHERE): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 17:59:51 |
|
||
|
Запрос на обновление: замена заданного числа на соседнее по условию
|
|||
|---|---|---|---|
|
#18+
Надо было сразу временными таблицами делать. Cделал временную таблицу tt (mId long, CO int, number text). Первичный ключ - СО + number. Сделал тестовую таблицу на 10000 записей. Запрос с DMIN умер. Вместо него вызываются три других: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Можно немного по-другому, чтоб тестовая таблица не болталась в списке: Код: plaintext 1. 2. 3. 4. 5. 6. Query1: Код: plaintext 1. 2. 3. 4. 5. 6. Query2: Код: plaintext 1. 2. 3. 4. Query1-1: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2004, 17:00:34 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32692256&tid=1671018]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 399ms |

| 0 / 0 |
