Sql 查询从 table 中获取第二个最新条目

Sql query to fetch second latest entry from a table

我有一个 table 包含下面提到的列。我想获取客户以前的状态。一旦客户 ID 可以有多个条目

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

请使用 QUALIFY 关键字和 ROW_NUMBER() 尝试以下查询:

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

下面的查询应该有效。

SELECT * from (
SELECT a.*, 
ROW_NUMBER() over (partition by customer_id order by start_date desc) rn
 from table a ) 
where rn =2 

您可以使用下面的查询,我想这很简单而且对我有用,

select * from customer order by end_date desc limit 1,1

考虑这个问题:Select Nth Row From A Table In 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;

如果您使用的是 Oracle 数据库,请尝试使用 ROW_NUMBER() function:Let 进行以下查询,考虑 table 名称是 客户


    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;