2016-01-15 3 views
1

коллеги-программисты.SQL: данные совокупной таблицы в подгруппах

У меня есть простая, но сложная проблема, которую мне нужно решить с помощью SQL (SQLite) для моего FME-скрипта для эффективной работы. У меня есть данные, которые я хочу объединить, но в подгруппах - учет уровня z. Это геологический профиль, где я хочу упростить входящие данные, прежде чем создавать свой профиль.

Пример данных

x,y,z_from,z_to,value 
1,2,1,2,A 
1,2,2,3,A 
1,2,3,4,B 
1,2,4,5,A 
1,2,5,6,A 
1,2,6,7,A 
1,2,7,8,C 

С SQL Я хочу агрегировать на значение, но только те строки, которые являются смежными (то наплыв, но на не-пространственных данных). И я хочу рассчитать (также в sql) правильные значения z_from- и z_to. Поэтому результатом приведенных выше приведенных выше данных должно быть следующее:

x,y,z_from,z_to,value 
1,2,1,3,A 
1,2,3,4,B 
1,2,4,7,A 
1,2,7,8,C 

Любая помощь по этому вопросу будет сохранена на всю вечность.

Питер

+1

таблица SQL представляет собой неупорядоченные наборы, так что не существует такого понятия, как «соседние» строки, если у вас есть столбец с указанием заказа.. –

+0

Хорошо, спасибо Гордон. Но z_from можно использовать для упорядочения. –

ответ

1

Похоже, что вы хотите, чтобы все строки, где «следующий» значение отличается, как это определено z_to. К сожалению, SQLite не поддерживает lead(), но вы можете сделать:

select e.* 
from (select e.*, 
      (select e2.value 
       from example e2 
       where e2.z_to > e.z_to 
       order by e2.z_to 
       limit 1 
      ) as next_value 
     from example e 
    ) e 
where next_value is null or next_value <> value; 
+0

Еще раз спасибо, Гордон. Я попытаюсь реализовать это. Я вернусь к вам! –