Запрос SQL для получения второй последней записи из таблицы - PullRequest
0 голосов
/ 02 мая 2018

У меня есть таблица с указанными ниже столбцами. Я хочу получить предыдущий статус клиента. Однажды идентификатор клиента может иметь несколько записей

Customer_id   status     start_date    end_date   Active
1             Member      01-JAN-18    04-FEB-18   N
1             Explorist   05-FEB-18    30-APR-18   N
1             Globalist   01-MAY-18    31-DEC-99   Y

Желаемый вывод

Customer _id     Previous_status   end_date
1                Explorist          30-APR-18

Ответы [ 5 ]

0 голосов
/ 03 мая 2018

Если вы используете Oracle DataBase, попробуйте запрос ниже с помощью функции ROW_NUMBER () : давайте рассмотрим имя таблицы customer


    SELECT TEMP.CUSTOMER_ID
          ,TEMP.STATUS
          ,TEMP.START_DATE
          ,TEMP.END_DATE
          ,TEMP.ACTIVE 
          FROM(
            SELECT ROW_NUMBER() OVER (PARTITION BY CUSTOMER_ID ORDER BY CUSTOMER_ID ASC,START_DATE DESC) AS "ROW_NUM"
                  ,CUSTOMER_ID
                  ,STATUS
                  ,START_DATE
                  ,END_DATE
                  ,ACTIVE
                  FROM CUSTOMER) TEMP 
                      WHERE TEMP."ROW_NUM" = 2;
0 голосов

Задумайтесь над этим вопросом: Выберите N-ую строку из таблицы в Oracle

В вашем случае это будет:

select * from (select a.*, rownum rnum from (select * from <your table name> 
order by <start_date or end_date> desc) a where rownum <= 2) where rnum >= 2;
0 голосов
/ 02 мая 2018

Ниже должен работать запрос.

SELECT * from (
SELECT a.*, 
ROW_NUMBER() over (partition by customer_id order by start_date desc) rn
 from table a ) 
where rn =2 
0 голосов
/ 02 мая 2018

Вы можете использовать запрос ниже, и я думаю, что это очень просто, и это сработало для меня,

select * from customer order by end_date desc limit 1,1
0 голосов
/ 02 мая 2018

Пожалуйста, попробуйте запрос ниже, используя ключевое слово QUALIFY и ROW_NUMBER ():

SELECT a.* from table a 
QUALIFY ROW_NUMBER OVER(PARTITION BY customer_id order by start_date desc) = 2
...