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;
我有一个 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;