Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизСложный запрос Найти похожие ветки
← →
bmp2006 © (2006-08-29 16:54) [0]Такая задача:
есть таблица 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|
Как это можно реализовать запросом?
← →
bmp2006 © (2006-08-29 16:55) [1]Извините, не совсем коректно задал вопрос, вот так правильно:
Такая задача:
есть таблица 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 запросом?
← →
Anatoly Podgoretsky © (2006-08-29 17:00) [2]|1|1|01.03.2005|29|
|3|1|01.03.2005|33|
Вот это противоречит твоему вопросу
← →
ANB © (2006-08-29 18:01) [3]
> |1|1|01.03.2005|29|
> |3|1|01.03.2005|33|
Не противоречит.
Account сменился и нумерация пошла заново.
На оракле это делается элементарно. А вот в случае с парадоксом чувствую, без обработки на клиенте не обойтись . . .
← →
Anatoly Podgoretsky © (2006-08-29 20:02) [4]Требуется изменить значения num таким образом чтобы они для каждой даты (для каждого нового дня) начинались с 1 и шли по порядку 1,2,3..
← →
saxon (2006-08-29 20:11) [5]
> Anatoly Podgoretsky © (29.08.06 20:02) [4]
Автор просто не дописал 3 вариант вопроса, с уточнением - "в пределах account" (как можно понять)
:)
← →
bmp2006 © (2006-08-30 11:02) [6]Я же поправился, см. второе сообщение
"Извините, не совсем коректно задал вопрос, вот так правильно:...."
Так что никак???
А вот в случае с парадоксом чувствую, без обработки на клиенте не обойтись . . на каком клиенте? неужели никто никогда ничего подобного не делал?
← →
Sergey13 © (2006-08-30 11:03) [7]> [6] bmp2006 © (30.08.06 11:02)
> А вот в случае с парадоксом чувствую, без обработки на клиенте
> не обойтись . . на каком клиенте? неужели никто никогда
> ничего подобного не делал?
Это он так прогу, которую ты пишешь, так обозвал. 8-)
← →
bmp2006 © (2006-08-30 11:33) [8]А если в тексте программы Delphi или, что лучше для меня, C Builder? Есть идеи?
← →
Sergey13 © (2006-08-30 11:37) [9]> [8] bmp2006 © (30.08.06 11:33)
А какие идеи? Выбираешь, упорядоченный как тебе надо, набор данных и в цикле пронумеровываешь это поле как тебе надо.
← →
bmp2006 © (2006-08-30 18:00) [10]извините конечно за назойливость. а можно на примере?
← →
ANB © (2006-08-30 18:09) [11]
> извините конечно за назойливость. а можно на примере?
можно. но деньги вперед.
← →
bmp2006 © (2006-08-30 18:52) [12]куда и сколько?
← →
Anatoly Podgoretsky © (2006-08-30 19:33) [13]Объяснил бы цель, откуда взяличь эти цифры и зачем их нужно перенумеровывать. Возможно для данной задачи будет проще навигационный метод.
← →
bmp2006 © (2006-08-30 19:47) [14]Эти цифры в таблице кот. используется другой программой. С нумерацией полный бардак. Записей в таблице около одного миллиона. Навигационный метод это метод ручного ковыряния? Тогда лучше убить себя об стену.
← →
Anatoly Podgoretsky © (2006-08-30 20:18) [15]bmp2006 © (30.08.06 19:47) [14]
Ну зачем себя убивать, запусти на ночь.
← →
ANB © (2006-08-31 10:38) [16]
> 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 рублей.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.088 c