![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сложный запрос [Paradox]
bmp2006 © (2006-08-29 16:54:00)Такая задача:
есть таблица t1 из полей
1. sys_num - уникальное int
2. num - int
3. open_date - дата
4. account - int
пример записей
|1|1|01.03.2005|29|
|2|3|01.03.2005|29|
|3|5|01.03.2005|33|
|4|1|01.03.2005|33|
|5|3|01.03.2005|33|
|6|2|02.03.2005|29|
|7|3|02.03.2005|29|
|8|5|02.03.2005|29|
Требуется изменить значения num таким образом чтобы они для каждой даты (для каждого нового дня) начинались с 1 и шли по порядку 1,2,3..
Чтобы в итоге было вот так:
|1|1|01.03.2005|29|
|2|2|01.03.2005|29|
|3|1|01.03.2005|33|
|4|2|01.03.2005|33|
|5|3|01.03.2005|33|
|6|1|02.03.2005|29|
|7|2|02.03.2005|29|
|8|3|02.03.2005|29|
Как это можно реализовать запросом?
ANB (2006-08-31 10:38:00) [1]
> bmp2006 © (30.08.06 19:47) [14]
Ладно, пользуйся моей добротой :
Значится пишешь запрос, отбирающий записи в нужном тебе порядке (order by), проверяещь где нибудь, что он работает так как тебе надо.
засовываешь запрос в кверю Query. Лепишь запрос на обновление в виде :
update t1
set num = :num
where sys_num
засовываешь его в кверю Update
дальше :
Query.Open;
N := 0;
open_date := Query.FieldByName('open_date').AsDate;
account := Query.FieldByName('account').AsDate;
while not Query.eof do begin
Inc(N);
if not
((open_date = Query.FieldByName('open_date').AsDate) and
(account = Query.FieldByName('account').AsDate))
then begin
open_date := Query.FieldByName('open_date').AsDate;
account := Query.FieldByName('account').AsInteger;
N := 1;
end;
Update.ParamByName('sys_num').AsInteger := Query.FieldByName('sys_num').AsInteger;
Update.ParamByName('num').AsInteger := N;
Update.Execute;
Query.Next;
end;
С тебя 75 рублей.
Anatoly Podgoretsky (2006-08-30 20:18:00) [2]bmp2006 © (30.08.06 19:47) [14]
Ну зачем себя убивать, запусти на ночь.
bmp2006 (2006-08-30 19:47:00) [3]Эти цифры в таблице кот. используется другой программой. С нумерацией полный бардак. Записей в таблице около одного миллиона. Навигационный метод это метод ручного ковыряния? Тогда лучше убить себя об стену.
Anatoly Podgoretsky (2006-08-30 19:33:00) [4]Объяснил бы цель, откуда взяличь эти цифры и зачем их нужно перенумеровывать. Возможно для данной задачи будет проще навигационный метод.
bmp2006 (2006-08-30 18:52:00) [5]куда и сколько?
ANB (2006-08-30 18:09:00) [6]
> извините конечно за назойливость. а можно на примере?
можно. но деньги вперед.
bmp2006 (2006-08-30 18:00:00) [7]извините конечно за назойливость. а можно на примере?
Sergey13 (2006-08-30 11:37:00) [8]> [8] bmp2006 © (30.08.06 11:33)
А какие идеи? Выбираешь, упорядоченный как тебе надо, набор данных и в цикле пронумеровываешь это поле как тебе надо.
bmp2006 (2006-08-30 11:33:00) [9]А если в тексте программы Delphi или, что лучше для меня, C Builder? Есть идеи?
Sergey13 (2006-08-30 11:03:00) [10]> [6] bmp2006 © (30.08.06 11:02)
> А вот в случае с парадоксом чувствую, без обработки на клиенте
> не обойтись . . на каком клиенте? неужели никто никогда
> ничего подобного не делал?
Это он так прогу, которую ты пишешь, так обозвал. 8-)
bmp2006 (2006-08-30 11:02:00) [11]Я же поправился, см. второе сообщение
"Извините, не совсем коректно задал вопрос, вот так правильно:...."
Так что никак???
А вот в случае с парадоксом чувствую, без обработки на клиенте не обойтись . .на каком клиенте? неужели никто никогда ничего подобного не делал?
saxon (2006-08-29 20:11:00) [12]
> Anatoly Podgoretsky © (29.08.06 20:02) [4]
Автор просто не дописал 3 вариант вопроса, с уточнением - "в пределах account" (как можно понять)
:)
Anatoly Podgoretsky (2006-08-29 20:02:00) [13]Требуется изменить значения num таким образом чтобы они для каждой даты (для каждого нового дня) начинались с 1 и шли по порядку 1,2,3..
ANB (2006-08-29 18:01:00) [14]
> |1|1|01.03.2005|29|
> |3|1|01.03.2005|33|
Не противоречит.
Account сменился и нумерация пошла заново.
На оракле это делается элементарно. А вот в случае с парадоксом чувствую, без обработки на клиенте не обойтись . . .
Anatoly Podgoretsky (2006-08-29 17:00:00) [15]|1|1|01.03.2005|29|
|3|1|01.03.2005|33|
Вот это противоречит твоему вопросу
bmp2006 (2006-08-29 16:55:00) [16]Извините, не совсем коректно задал вопрос, вот так правильно:
Такая задача:
есть таблица PARADOX t1 из полей:
1. sys_num - уникальное int
2. num - int
3. open_date - дата
4. account - int
пример записей
|1|1|01.03.2005|29|
|2|3|01.03.2005|29|
|3|5|01.03.2005|33|
|4|1|01.03.2005|33|
|5|3|01.03.2005|33|
|6|2|02.03.2005|29|
|7|3|02.03.2005|29|
|8|5|02.03.2005|29|
Требуется изменить значения num таким образом чтобы они для каждой даты (для каждого нового дня) и для каждого account начинались с 1 и шли по порядку 1,2,3..
Чтобы в итоге было вот так:
|1|1|01.03.2005|29|
|2|2|01.03.2005|29|
|3|1|01.03.2005|33|
|4|2|01.03.2005|33|
|5|3|01.03.2005|33|
|6|1|02.03.2005|29|
|7|2|02.03.2005|29|
|8|3|02.03.2005|29|
Для выполнения запросов использую DBD32(Борланд) Как это можно реализовать SQL запросом?