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

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

Подскажите можно ли на SQL таблицу [D7, Paradox]


alucard ©   (2006-10-03 12:26:00) 

Доброго дня.

Подскажите как на SQL создать таблицу которая будет содержать разницу текущей и предыдущей записи одного поля.

Спасибо.


alucard   (2006-10-04 10:37:00) [1]

Спасибо.

а на парадоксе заработает?


Mike Kouzmine   (2006-10-03 17:55:00) [2]

в парадоксе после пост амба. никак не получешь. ни sql ни чем.


k2   (2006-10-03 17:01:00) [3]

лучше так select col1, col2, col2 - lag(col2)over(order by col1) col3 ... :)


Stanislav   (2006-10-03 16:58:00) [4]

Незнаю за парадокс, но на MSSQL должна работать.
alucard ©   (03.10.06 12:26)  , так что ANBправ.

select table1.a-(select top 1 a from table where id<table1.id order by id) from table as table1


k2   (2006-10-03 16:58:00) [5]

select col1, col2, col2 - lag(col2)over(partition by null order by col1) col3 from  
(select 1 col1, 20 col2 from dual
union all
select 2, 22 from dual
union all
select 3, 45 from dual
union all
select 4, 16 from dual)

1 20
2 22 2
3 45 23
4 16 -29


dr Gonzo   (2006-10-03 16:42:00) [6]

2 ANB © Давай, посмотрим реализацию, будет интересно.


ANB   (2006-10-03 15:48:00) [7]


> За свои слова надо отвечать.

А я не обещал, что буду за тебя запрос писать. :) Я сказал, что написать его можно. Могу даже на халяву оракловый вариант запостить.


dr Gonzo   (2006-10-03 13:38:00) [8]

Самый простой выход "В лоб", сразу скажу, что он НЕ ОПТИМАЛЕН. Использовать тупой цикл по всем записям и строить эту таблицу каждый раз. Реализовать можно как на Delphi так и на SQL с пом-ю курсоров.

Более нормальный подход связанный список => легкий Join удобство выборки. Например так:

declare @T  table (prevID int , pID int , nexID int, Value int )

SELECT A.pID, A.Value - B.Value AS Delta FROM @T  AS A
 LEFT JOIN @T AS B ON A.prevId = B.pId


Sergey13   (2006-10-03 13:17:00) [9]

> [6] alucard ©   (03.10.06 13:09)
> В базе и так записей не мало.
Ну и что? Потри лишнее.

> За свои слова надо отвечать
Что бы человек отвечал за свои слова, человеку надо платить за его слова.
1. Ты ему заплатил?
2. С чего ты взял, что он не прав?


alucard   (2006-10-03 13:09:00) [10]


> Sergey13 ©   (03.10.06 13:04) [5]

В базе и так записей не мало.

Если никак, тода это выход :)


> ANB ©   (03.10.06 12:28) [1]

За свои слова надо отвечать.


Sergey13   (2006-10-03 13:04:00) [11]

> [4] alucard ©   (03.10.06 12:34)

Судя по топику
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1159512584&n=1
ты и тут напроектировал не слишком удачно. Почему бы не хранить наоборот - дельту изменения, а текущее значение получать сложением. Или хранить и то и другое для ускорения выборок (с точки зрения теории это не правильно, тем более для Парадокса, но иногда здорово выручает).


alucard   (2006-10-03 12:34:00) [12]


> dr Gonzo ©   (03.10.06 12:32) [3]

Да вот человек говорит что можно.
> ANB ©   (03.10.06 12:28) [1]


dr Gonzo   (2006-10-03 12:32:00) [13]

На Paradox .... хм похоже, что на уровне БД никак. Тут только тригер поможет, который будет на Insert, Delete и Update по изменениям обновлять эту разностную таблицу.


alucard   (2006-10-03 12:31:00) [14]


> ANB ©   (03.10.06 12:28) [1]

Это хорошо.

Как он примерно будет выглядеть?

Я не знаю как на SQL это реализовать.


ANB   (2006-10-03 12:28:00) [15]

никак. но можно написать запрос, который вернет набор данных с этим результатом.


Наверх

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