Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравнить строки в результатах запроса... / 8 сообщений из 8, страница 1 из 1
12.09.2008, 18:34
    #35537167
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сравнить строки в результатах запроса...
Есть запрос, который возвращает таблицу:
Код: plaintext
1.
2.
3.
col1    col2    col3
 1         2         3 
 4         5         11 
 7         8         13 
Можно ли как-нибудь добавить к результатам столбец, в который будет вставляться, например, разница между числом с этой же строки запроса и числом с предыдущей (оба из столбца 3):
Код: plaintext
1.
2.
3.
col1    col2    col3   col4
 1         2         3         0 
 4         5         11        8 
 7         8         13        2 
Меня интересует даже не столько решение, сколько вопрос, входят ли подобные манипуляции в область действия стандарта SQL, или ее не решить без написания хранимых процедур и пр.?
...
Рейтинг: 0 / 0
13.09.2008, 02:25
    #35537455
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сравнить строки в результатах запроса...
авторразница между числом с этой же строки запроса и числом с предыдущей
в SQL нет общего понятия "предыдущая строка". строки возвращаются в случайном порядке, как больше нравится конкретной СУБД. даже в двух подряд выполненных запросах этот порядок может поменяться.

Когда Вы говорите "предыдущая строка" - говорите по какому критерию она считается предыдущей :)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
15.09.2008, 06:19
    #35538724
Как сравнить строки в результатах запроса...
rockclimberМеня интересует даже не столько решение, сколько вопрос, входят ли подобные манипуляции в область действия стандарта SQL, или ее не решить без написания хранимых процедур и пр.?Входят, решить. Но при одном условии - должен быть задан порядок строк и этот порядок должен быть детерминированным.
...
Рейтинг: 0 / 0
15.09.2008, 10:18
    #35538902
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сравнить строки в результатах запроса...
Добрый Э - ЭхНо при одном условии - должен быть задан порядок строк и этот порядок должен быть детерминированным.
А на что влияет порядок?
Пусть будет, например:
Код: plaintext
order by  1 ,  2 ,  3 
...
Рейтинг: 0 / 0
15.09.2008, 10:27
    #35538926
Как сравнить строки в результатах запроса...
rockclimberА на что влияет порядок?:) Именон порядок влияет на то, какая трока для какой будет предыдущей...
...
Рейтинг: 0 / 0
15.09.2008, 10:49
    #35538981
Как сравнить строки в результатах запроса...
ANSI-совместимый вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select t1.*, coalesce(t2.col3, 0 ) as prev_col3,
       t1.col3 - coalesce(t2.col3, 0 ) as delta
  from t t1
  left join t t2
    on t1.col1 > t2.col1
 where t2.col1 = (select max(t3.col1) from t t3 where t3.col1 < t1.col1 )
    or t2.col1 is null
 order by  1 , 2 , 3 

"Заточка" под "местный" синтаксис:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select t1.*, 
       coalesce(
        (
          select col3 
            from t t2 
           where t2.col1 < t1.col1 
           order by t2.col1 desc 
           limit  1 
        ), 0 ) as prev_col3,
       t1.col3 -  
       coalesce(
        (
          select col3 
            from t t2 
           where t2.col1 < t1.col1 
           order by t2.col1 desc 
           limit  1 
        ), 0 ) as delta
  from t t1

З.Ы.
Это лишь как направление для дальнейших размышлений.
Примеры решал в голове, проверить возможности не было, поэтому возможны ошибки/опечатки.
...
Рейтинг: 0 / 0
15.09.2008, 12:29
    #35539289
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сравнить строки в результатах запроса...
Добрый Э - Эх Именон порядок влияет на то, какая трока для какой будет предыдущей...А, в этом смысле... Да тут неважно, когда до практики дойдет, я выведу их в нужном порядке.
...
Рейтинг: 0 / 0
15.09.2008, 12:34
    #35539303
rockclimber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сравнить строки в результатах запроса...
Добрый Э - ЭхANSI-совместимый вариант:
Код: plaintext
1.
           order by t2.col1 desc 
           limit  1 

Я еще не успел до конца осознать... Может, тут не limit, а offset? Не поверите, но идея присобачить таблицу к ней самой, но с offset'ом на 1 строку мне пришло в голову, пока грузилась страница с ответом )))
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравнить строки в результатах запроса... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]