Как РАЗДЕЛИТЬ каждую вторую запись на основе похожих данных? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть такая таблица ...

enter image description here

Что мне нужно, так это путь в SQL для достижения этой цели ...

enter image description here

Красная линия мне не нужна, поскольку я эффективно сместил даты в столбце 'end_date' вверх на 1.То есть: я хочу, чтобы строка была отброшена или проигнорирована

Даты основаны на дате начала и окончания - 2-й строки или следующей строки с FROMCODE и TOCODE напротив друг друга .Итак, чтобы объяснить лучше, я пытаюсь сделать GROUP BY через каждые две строки FROMCODE = TOCODE следующей строки, и для согласованности я хочу убедиться, что TOCODE первой строки = FROMCODE 2-й строки,и т. д.

Надеюсь, я проясняю ситуацию.

Я пытался использовать рекурсивное СОЕДИНЕНИЕ, чтобы связать следующую строку, используя FROMCODE = TOCODE для подпункта JOIN и TOCODE =FROMCODE субсоединения, плюс убедитесь, что запись имеет тот же VOYAGE_ID и RANK больше, чем RANK 1-го ряда.Но все, что я получаю, это тарабарщина.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете решить эту проблему, используя left join - при условии, что rank s не имеют пробелов:

select t.*,
       tnext.end_date as new_end_date
from t join
     t tnext
     on tnext.voyage_id = t.voyage_id and tnext.rank = t.rank + 1;

Обратите внимание, что join удаляет последнюю строку, а также находит следующий конецдата.

0 голосов
/ 08 июня 2018

Вы можете использовать outer apply:

select t.*, tt.end_date as new_end_date
from table t outer apply (
      select top 1 t1.end_date
      from table t1
      where t1.voyage_id = t.voyage_id and
            t1.rank > t.rank
      order by t1.rank
) tt
where tt.end_date is not null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...