Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

Подскажите можно ли на SQL таблицу   Найти похожие ветки 

 
alucard ©   (2006-10-03 12:26) [0]

Доброго дня.

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

Спасибо.


 
ANB ©   (2006-10-03 12:28) [1]

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


 
alucard ©   (2006-10-03 12:31) [2]


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

Это хорошо.

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

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


 
dr Gonzo ©   (2006-10-03 12:32) [3]

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


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


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

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


 
Sergey13 ©   (2006-10-03 13:04) [5]

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

Судя по топику
http://delphimaster.net/view/3-1159512584/
ты и тут напроектировал не слишком удачно. Почему бы не хранить наоборот - дельту изменения, а текущее значение получать сложением. Или хранить и то и другое для ускорения выборок (с точки зрения теории это не правильно, тем более для Парадокса, но иногда здорово выручает).


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


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

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

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


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

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


 
Sergey13 ©   (2006-10-03 13:17) [7]

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

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


 
dr Gonzo ©   (2006-10-03 13:38) [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


 
ANB ©   (2006-10-03 15:48) [9]


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

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


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

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


 
Stanislav ©   (2006-10-03 16:58) [11]

Незнаю за парадокс, но на 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) [12]

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


 
k2 ©   (2006-10-03 17:01) [13]

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


 
Mike Kouzmine ©   (2006-10-03 17:55) [14]

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


 
alucard ©   (2006-10-04 10:37) [15]

Спасибо.

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
2-1160297204
WoW
2006-10-08 12:46
2006.10.22
Нужен толковой пример по работе с интерфейсами...


2-1160115430
Priest
2006-10-06 10:17
2006.10.22
Как найти ошибку если есть только адрес


15-1159763347
Kati
2006-10-02 08:29
2006.10.22
Нужна помощь


2-1160058261
maverick_man
2006-10-05 18:24
2006.10.22
Подскажите плиз


1-1157801018
guav
2006-09-09 15:23
2006.10.22
Прозрачный ТМемо





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский