Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом. Вывод значения предыдущей строки. / 7 сообщений из 7, страница 1 из 1
04.08.2016, 08:55:48
    #39285854
PalR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
Уважаемые коллеги, помогите составить запрос.
Имеется тавлица со сначениями фамилия, имя, отчество, дата накладной, номер накладной.
with t as
(
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, '10.07.2016' DT, '1821' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, '15.06.2015' DT, '1052' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, '06.09.2014' DT, '996' NAK from dual
union all
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, '08.05.2016' DT, '1001' NAK from dual
union all
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, '24.08.2014' DT, '94' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, '15.06.2015' DT, '1058' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, '06.05.2016' DT, '1235' NAK from dual
union ALL
select 'СИДОРОВ' FAM, 'СИДОР' IM, 'СИДОРОВИЧ' OT, '18.11.2014' DT, '156' NAK from dual
)
select FAM, IM, OT, DT, NAK from t

Необходимо вывести значения фамилия, имя, отчество, дата накладной, номер накладной, дата предыдущей накладной, номер предыдущей накладной. Должно получиться такого вида
FAMIMOTDTNAKDT_PREDNAK_PREDИВАНОВИВАНИВАНОВИЧ10.07.2016182108.05.20161001ПЕТРОВПЕТРПЕТРОВИЧ15.06.2015105206.09.2014996ПЕТРОВПЕТРПЕТРОВИЧ06.09.2014996NULLNULLИВАНОВИВАНИВАНОВИЧ08.05.2016100124.08.201494ИВАНОВИВАНИВАНОВИЧ24.08.201494NULLNULLПЕТРОВПЕТРПЕТРОВИЧ15.06.2015105815.06.20151052ПЕТРОВПЕТРПЕТРОВИЧ06.05.2016123515.06.20151058СИДОРОВСИДОРСИДОРОВИЧ18.11.2014156NULLNULL
...
Рейтинг: 0 / 0
04.08.2016, 09:03:16
    #39285860
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
PalRпредыдущейRTFM Analytic Functions (FAQ)
...
Рейтинг: 0 / 0
04.08.2016, 09:21:51
    #39285879
PalR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
Пробовал с LAG, но получается бред.
...
Рейтинг: 0 / 0
04.08.2016, 09:21:56
    #39285880
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
Как-то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t as
(
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, to_date('10.07.2016', 'dd.mm.yyyy') DT, '1821' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, to_date('15.06.2015', 'dd.mm.yyyy') DT, '1052' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, to_date('06.09.2014', 'dd.mm.yyyy') DT, '996' NAK from dual
union all
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, to_date('08.05.2016', 'dd.mm.yyyy') DT, '1001' NAK from dual
union all
select 'ИВАНОВ' FAM, 'ИВАН' IM, 'ИВАНОВИЧ' OT, to_date('24.08.2014', 'dd.mm.yyyy') DT, '94' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, to_date('15.06.2015', 'dd.mm.yyyy') DT, '1058' NAK from dual
union ALL
select 'ПЕТРОВ' FAM, 'ПЕТР' IM, 'ПЕТРОВИЧ' OT, to_date('06.05.2016', 'dd.mm.yyyy') DT, '1235' NAK from dual
union ALL
select 'СИДОРОВ' FAM, 'СИДОР' IM, 'СИДОРОВИЧ' OT, to_date('18.11.2014', 'dd.mm.yyyy') DT, '156' NAK from dual
)
select t.*, lag(dt) over(partition by fam, im, ot order by dt) pred_dt, lag(nak) over(partition by fam, im, ot order by dt) pred_nak from t
...
Рейтинг: 0 / 0
04.08.2016, 09:24:22
    #39285882
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
PalRПробовал с LAG, но получается бред.Потому что бредово пробовал. Закономерно.
...
Рейтинг: 0 / 0
04.08.2016, 09:44:30
    #39285903
PalR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
Я делал так
Код: plsql
1.
2.
3.
4.
5.
6.
select FAM, IM, OT, 
        DT, 
        NAK,
        to_char(to_date(substr(lag(to_char(to_date(dt,'dd.mm.yyyy'),'yyyymmdd')||nak,1) over (order by FAM||'.'||IM||'.'||OT||'.'||to_char(to_date(dt,'dd.mm.yyyy'),'yyyymmdd')||nak),1,8),'yyyymmdd'),'dd.mm.yyyy') AS dt_pred,
        substr(lag(to_char(to_date(dt,'dd.mm.yyyy'),'yyyymmdd')||nak,1) over (order by FAM||'.'||IM||'.'||OT||'.'||to_char(to_date(dt,'dd.mm.yyyy'),'yyyymmdd')||nak),9,100) AS nak_pred
        from t


Не сообразил как прикрутить группировку.
Бельфя , спасибо большое.
...
Рейтинг: 0 / 0
04.08.2016, 14:11:06
    #39286258
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом. Вывод значения предыдущей строки.
PalR,
как ты живешь то с такой больной параноидальной фантазией?) ну это же идиотизм то что ты написал.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом. Вывод значения предыдущей строки. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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