enter image description here我有一个3列的表如下。我需要写一个查询,以找出是否有任何订单后,断开订单的基础上,订单日期。也就是说,如果一个帐户有多个订单,我想对它们进行排名,并检查Disconnect是否具有最高排名(如果disconnect订单相对于帐户具有最高排名,则disconnect是最后一个订单)。先谢谢你了。
Account no, Order, Order_date
101,Connect,1-1-2023
101,Modify,1-3-2023
103,Connect,1-2-2023
101,Disconnect,1-3-2023
我试过了-
SELECT account_no,order_id,order_date,RANK() OVER (ORDER BY created_t asc)rank_no
FROM table;
2条答案
按热度按时间ippsafx71#
我需要写一个查询,以找出是否有任何订单后,断开订单的基础上,订单日期。
添加一个
PARTITION BY
子句,并将ORDER BY
子句从ASC
更改为DESC
,以便最新的行始终排名第一,然后您可以检查排名第一的行的order_id
是否为Disconnect
。如果你需要检查至少有一行的order_id
和Disconnect
,那么你可以使用COUNT
解析函数和CASE
表达式:或者,在Oracle 12中,您可以使用
MATCH_RECOGNIZE
:pepwfjgg2#
您也可以使用EXISTS来找出这样的条件,以获得具有相同account_no的Disconnect的类型不同的行:
如果您希望Disconnect行后面有一个not Disconnect: