Выбор в одну строку двух соседних записей из таблицы
Добавлено: 12 окт 2005, 15:36
Можно ли SQL-запросом сделать следуещее:
к каждой строчке таблицы приписать "предыдущую", и посчитать там разницу некоторых полей, т.е. то, что изменилось по сравнению с "предыдыущей"
понятие "предыдущей" можно определить как "ближайшая по некоторому критерию но не равная ей",
например предыдущая по дате, по массе, по росту.
т.е. из таблицы вида
01.01.2001 "строка 1"
02.01.2001 "строка 2"
05.01.2001 "строка 3"
получить
01.01.2001 "строка 1" NULL NULL
02.01.2001 "строка 2" 01.01.2001 "строка 1"
05.01.2001 "строка 3" 02.01.2001 "строка 2"
в данном случае выбирается предыдущая по дате.
или например, есть таблица с данными на людей (рост, вес, размер одежды и т.д.)
их можно сгруппировать, например, по росту (GROUP BY "рост") получив данные со средними данными по весу, и размеру одежды людей разного роста. Как теперь запросом получить из этих данных, на сколько отличается вес у людей разного роста?
что-то вроде
Рост Вес Отличие_от_предыдущей_группы_рост Отличие_от_предыдущей_группы_вес
150 48 NULL NULL
160 63 10 15
180 75 20 12
В Oracle можно использовать для этой цели rownum и вложенный select . Можно ли это сделать в Firebird 1.5 ?
к каждой строчке таблицы приписать "предыдущую", и посчитать там разницу некоторых полей, т.е. то, что изменилось по сравнению с "предыдыущей"
понятие "предыдущей" можно определить как "ближайшая по некоторому критерию но не равная ей",
например предыдущая по дате, по массе, по росту.
т.е. из таблицы вида
01.01.2001 "строка 1"
02.01.2001 "строка 2"
05.01.2001 "строка 3"
получить
01.01.2001 "строка 1" NULL NULL
02.01.2001 "строка 2" 01.01.2001 "строка 1"
05.01.2001 "строка 3" 02.01.2001 "строка 2"
в данном случае выбирается предыдущая по дате.
или например, есть таблица с данными на людей (рост, вес, размер одежды и т.д.)
их можно сгруппировать, например, по росту (GROUP BY "рост") получив данные со средними данными по весу, и размеру одежды людей разного роста. Как теперь запросом получить из этих данных, на сколько отличается вес у людей разного роста?
что-то вроде
Рост Вес Отличие_от_предыдущей_группы_рост Отличие_от_предыдущей_группы_вес
150 48 NULL NULL
160 63 10 15
180 75 20 12
В Oracle можно использовать для этой цели rownum и вложенный select . Можно ли это сделать в Firebird 1.5 ?