Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.03 c
2-1160864503
z1bob
2006-10-15 02:21
2006.10.29
Вопрос от новичка. Про алгоритм и большой массив.


4-1149756872
Eldev
2006-06-08 12:54
2006.10.29
Смена буквы раздела диска


2-1160769352
Plm
2006-10-13 23:55
2006.10.29
Подключение к базе Microsoft Access


6-1149961804
anton773
2006-06-10 21:50
2006.10.29
преобразовать IP адрес


2-1160450667
learner
2006-10-10 07:24
2006.10.29
Жутко тормозит BDS 2006




   Наверх