Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сложный запрос [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 запросом?


Наверх

Титульная страница Поиск, карта сайта Написать письмо