У меня есть следующая таблица
EMP_ID ,DATETIME_OF_MOVEMENT,CITY ,RANK
2258325 ,1/18/2020 5:37 ,London ,1
2258325 ,1/19/2020 11:01 ,Manchester ,2
2258325 ,1/20/2020 15:06 ,London ,3
2656700 ,1/20/2020 23:59 ,London ,1
2656700 ,1/21/2020 6:48 ,Manchester ,2
2656700 ,1/21/2020 6:48 ,Liverpool ,3
2656700 ,1/26/2020 10:47 ,London ,4
6631583 ,1/18/2020 18:00 ,London ,1
6631583 ,1/19/2020 14:25 ,Manchester ,2
6631583 ,1/20/2020 8:53 ,Liverpool ,3
6631583 ,1/20/2020 14:48 ,Manchester ,4
6631583 ,1/21/2020 11:34 ,London ,5
Я хочу запросить сотрудника, который находился в Лондоне и вернулся в Лондон. Первое местоположение должно быть Лондон Второе - первое местоположение после Лондона, а третье - Лондон
Я использовал следующий запрос, но некоторые сотрудники пропустили
select emp_id , date_of_movement as first_movement , city as first_city ,lead
(DATETIME_OF_MOVEMENT, 1) over ( partition by emp_id order by DATETIME_OF_MOVEMENT) as second_movement ,
lead (city , 1) over ( partition by emp_id order by DATETIME_OF_MOVEMENT) as second_city ,
lead (DATETIME_OF_MOVEMENT, 2) over ( partition by emp_id order by DATETIME_OF_MOVEMENT) as third_movement ,
lead (city , 1) over ( partition by emp_id order by DATETIME_OF_MOVEMENT) as third_city ,
from table
результат кода
CUSTOMER_ID,first_movement ,first_city,second_movment ,second_movement,third_movment ,third_city
2258325 ,1/18/2020 5:37 ,London ,1/19/2020 11:01,Manchester ,1/20/2020 15:06,London
2656700 ,1/20/2020 23:59,London ,1/21/2020 6:48 ,Manchester ,1/21/2020 6:48 ,Liverpool
6631583 ,1/18/2020 18:00,London ,1/19/2020 14:25,Manchester ,1/20/2020 8:53 ,Liverpool
Этот код перехватывает сотрудника по его пути движения (например, emp_id: 2258325) 1 - Лондон 2 - любой другой город 3 - Лондон
Он не будет работать нормально, если движение сотрудник, подобный следующему 1 - Лондон 2 - любой другой город 3 - любой другой город 4 - Лондон
Я хочу, чтобы результат был похож на
CUSTOMER_ID,first_movement ,first_city,second_movement,second_city,third_movement ,third_city
2258325 ,1/18/2020 5:37 ,London ,1/19/2020 11:01,Manchester ,1/20/2020 15:06,London
2656700 ,1/20/2020 23:59,London ,1/21/2020 6:48 ,Manchester ,1/26/2020 10:47,London
6631583 ,1/18/2020 18:00,London ,1/19/2020 14:25,Manchester ,1/21/2020 11:34,London
Любое предложение, пожалуйста?
WITH YOUR_TABLE (EMP_ID,
DATETIME_OF_MOVEMENT,
CITY,
RANK_)
AS (SELECT 2258325,
'1/18/2020 5:37',
'London',
1
FROM DUAL
UNION ALL
SELECT 2258325,
'1/19/2020 11:01',
'Manchester',
2
FROM DUAL
UNION ALL
SELECT 2258325,
'1/20/2020 15:06',
'London',
3
FROM DUAL
UNION ALL
SELECT 2656700,
'1/20/2020 23:59',
'London',
1
FROM DUAL
UNION ALL
SELECT 2656700,
'1/21/2020 6:48',
'Manchester',
2
FROM DUAL
UNION ALL
SELECT 2656700,
'1/21/2020 6:48',
'Liverpool',
3
FROM DUAL
UNION ALL
SELECT 2656700,
'1/26/2020 10:47',
'London',
4
FROM DUAL
UNION ALL
SELECT 6631583,
'1/18/2020 18:00',
'London',
1
FROM DUAL
UNION ALL
SELECT 6631583,
'1/19/2020 14:25',
'Manchester',
2
FROM DUAL
UNION ALL
SELECT 6631583,
'1/20/2020 8:53',
'Liverpool',
3
FROM DUAL
UNION ALL
SELECT 6631583,
'1/20/2020 14:48',
'Manchester',
4
FROM DUAL
UNION ALL
SELECT 6631583,
'1/21/2020 11:34',
'London',
5
FROM DUAL
UNION ALL
SELECT 6631583,
'1/22/2020 14:48',
'Manchester',
6
FROM DUAL
UNION ALL
SELECT 6631583,
'1/24/2020 11:34',
'London',
7
FROM DUAL) -- YOUR QUERY STARTS FROM HERE SELECT EMP_ID,
MAX (CASE WHEN MINRN = RANK_ THEN DATETIME_OF_MOVEMENT END)
AS first_movement,
MAX (CASE WHEN MINRN = RANK_ THEN CITY END) AS first_CITY,
MAX (CASE WHEN MINRN + 1 = RANK_ THEN DATETIME_OF_MOVEMENT END)
AS SECOND_movement,
MAX (CASE WHEN MINRN + 1 = RANK_ THEN CITY END) AS SECOND_CITY,
MAX (CASE WHEN MAXRN = RANK_ THEN DATETIME_OF_MOVEMENT END)
AS THIRD_movement,
MAX (CASE WHEN MAXRN = RANK_ THEN CITY END) AS THIRD_CITY
FROM (SELECT T.*,
MAX (CASE WHEN CITY = 'London' THEN RANK_ END)
OVER (PARTITION BY EMP_ID)
AS MAXRN,
MIN (CASE WHEN CITY = 'London' THEN RANK_ END)
OVER (PARTITION BY EMP_ID)
AS MINRN
FROM YOUR_TABLE T) WHERE MAXRN - MINRN > 1 GROUP BY EMP_ID;
проверить это не работает @ Teja sh
результат должен быть таким:
