Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Сложный запрос   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.036 c
15-1159951163
BadTester
2006-10-04 12:39
2006.10.29
Оцените, вот наднях написал программу Smart FM !!!


2-1160823835
MAX.
2006-10-14 15:03
2006.10.29
подскажите


2-1160368715
DimonS
2006-10-09 08:38
2006.10.29
Подскажите в чем ошибка в запросе на вставку


15-1159447965
Ученик чародея.
2006-09-28 16:52
2006.10.29
В наших вузах программистов учат всякой ерунде


15-1160576251
Гарри Поттер
2006-10-11 18:17
2006.10.29
Поиск в Опера 9