Сравнение дат двух последовательных ячеек

vipTelnet
Дата: 11.01.2013 18:37:20
Всем привет
Есть такая вот скажем не сложная табличка с 3 столбцами

id date value
1 2010-12-18 3
2 2010-12-17 4
3 2010-12-19 2
3 2010-12-16 1

Нужно сделать выборку по таким условиям
Если дата из первой строки больше даты из второй то необходимо вычесть из первого значение второе
ну на примере это выглядит примерно так
if(date.1>date.2) value = value.1 - value.2
if(date.1>date.2) value = value.1 - value.2
vipTelnet
Дата: 11.01.2013 18:41:09
нажал там случайно enter и сообщение опубликовалось
Вот что хотел добавить
if(date.1>date.2) change = value.1 - value.2 else change = 0
if(date.2>date.3) change = value.2 - value.3 else change = 0
if(date.3>date.4) change = value.3 - value.4 else change = 0

и после выборки не добавить к показу еще одни столбик со значение change
javajdbc
Дата: 11.01.2013 18:58:12
vipTelnet,

порядок колонок и сортировка -- обязательны.

select 
  dat1,
  subtime(@d,dat1) diff,
  @d:=dat1 zzz
from
   table1,
   (select @d:='2000-01-01 00:00:00') zz
order by dat1
javajdbc
Дата: 11.01.2013 19:03:17
пардон, не прочитал внимательно вопрос.

Ну , вопшем идея понятна:
1.обязательно сортировать
2. заранее задать одну или несколько переменных
3. делать в селекте некие манипуляции как
в цикле:
-- вывести текушее значение
-- посчитать разницу с предыдушим значением (из переменой)
-- просвоить переменой текушеезначение и
-- пойти на следуюший цикл
vipTelnet
Дата: 11.01.2013 19:06:02
в цикле:
Так вот как это делать в цикле?
Раньше я с таким ни когда не сталкивался
javajdbc
Дата: 11.01.2013 19:16:49
vipTelnet,

СКЛ изначально не расчитан на последовательные
вычисления.
Однако Оракле первый ввел "оконные функции"
("analytic functions") и сейчас это (кажется) стандарт.

Мускл пошел другим путем -- разрешил работу с переменными.
Это не дотягивает до удобства оконных фунций,
но можно делать мелкие и средние вычисления:
-- разница с предыдушими строчками
-- накопление
-- ранк (ранжировка) в группе, нахождение мах/мин в группах
-- и др.

(посмотрите соответсвыюший FAQ топик в верху
списка тем).

Учтите, что переменные четко работают только
в СЕЛЕКТ блоке, только при четком порядке
евалюации строчек. Попытки выкрутасничать
могут привести к нестабильности.
vipTelnet
Дата: 11.01.2013 19:23:51
Извините можно последний вопрос а PostgreSQL умеет работать с оконными функциями?
Roman OL
Дата: 11.01.2013 19:49:45
vipTelnet,

умеет
javajdbc
Дата: 11.01.2013 19:56:34
Roman OL,

молодцы, вообше я слышал много раз что
Постгре более разнообразный продук чем мускл,
и процедуры там удобнее и окна умеют считать.


И всеже мускл чаше встречается, почему
-- проше?
-- исторически сидит во всех дистрибутивах?
-- легче администрировать?
-- что-то еше?
vipTelnet
Дата: 11.01.2013 20:36:47
Всем спасибо изучать PostgreSQL