![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите можно ли на 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]никак. но можно написать запрос, который вернет набор данных с этим результатом.