应该为此编写什么查询?
What query should be written for this?
您好,我有一笔银行客户的交易 table。 table 的名称是 CUST_TRANSACTION。它有几个字段,如 CUST_ID、TRANSACTION_DATE 等。我想编写一个查询,以便我可以 select 3 个特定客户 ID 的最后一笔交易。例如
TRANSACTION_ID | CUST_ID | TRANSACTION_DATE | TRANSACTION_DESC
100023 | 2 | 15-12-2014 06:00 | Withdraw 1000 dollars
100022 | 5 | 14-12-2014 16:00 | Deposit 1000 dollars
100021 | 5 | 14-12-2014 15:00 | Withdraw 500 dollars
100020 | 4 | 12-12-2014 15:00 | Withdraw 300 dollars
100019 | 4 | 12-12-2014 14:39 | Deposit 300 dollars
100018 | 2 | 12-12-2014 15:00 | Withdraw 60 dollars
我想获取 ID 为 2、4、5 的最后一笔交易
TRANSACTION_ID | CUST_ID | TRANSACTION_DATE | TRANSACTION_DESC
100023 | 2 | 15-12-2014 06:00 | Withdraw 1000 dollars
100022 | 5 | 14-12-2014 16:00 | Deposit 1000 dollars
100020 | 4 | 12-12-2014 15:00 | Withdraw 300 dollars
我该如何处理?
编辑:到目前为止我已经试过了
select *
from CUST_TRANSACTION
where CUST_ID IN('2', '5', '4')
and rownum <4
order by transaction_date desc
试试这个
select t1.TRANSACTION_ID ,
t1.CUST_ID ,t1.TRANSACTION_DATE ,t1.TRANSACTION_DESC from table t1
inner join
(
select CUST_ID ,min(TRANSACTION_DATE) as TRANSACTION_DATE from table
group by CUST_ID
) t2
on t1.CUST_ID=t2.CUST_ID and t1.TRANSACTION_DATE =t2.TRANSACTION_DATE
根据客户 ID 分组并获得最大值 (transaction_date)。获取包含此客户 ID 和 transaction_date 组合
的记录
你应该试试这个
SELECT CUST_ID , a.TRANSACTION_ID, TRANSACTION_DATE , TRANSACTION_DESC from CUST_TRANSACTION AS a
INNER JOIN (SELECT MAX(TRANSACTION_ID) TRANSACTION_ID FROM CUST_TRANSACTION GROUP BY CUST_ID) AS b ON a.TRANSACTION_ID=b.TRANSACTION_ID
使用 rank() 获取最高项,然后 select 仅获取每个项的最高行。例如:
SELECT *
FROM (
select
transaction_id,
cust_id,
transaction_date,
transaction_desc,
rank() OVER (PARTITION BY cust_id ORDER BY cust_id, transaction_date desc) AS rank_id
from cust_transaction
) ct
WHERE ct.rank_id = 1
您好,我有一笔银行客户的交易 table。 table 的名称是 CUST_TRANSACTION。它有几个字段,如 CUST_ID、TRANSACTION_DATE 等。我想编写一个查询,以便我可以 select 3 个特定客户 ID 的最后一笔交易。例如
TRANSACTION_ID | CUST_ID | TRANSACTION_DATE | TRANSACTION_DESC
100023 | 2 | 15-12-2014 06:00 | Withdraw 1000 dollars
100022 | 5 | 14-12-2014 16:00 | Deposit 1000 dollars
100021 | 5 | 14-12-2014 15:00 | Withdraw 500 dollars
100020 | 4 | 12-12-2014 15:00 | Withdraw 300 dollars
100019 | 4 | 12-12-2014 14:39 | Deposit 300 dollars
100018 | 2 | 12-12-2014 15:00 | Withdraw 60 dollars
我想获取 ID 为 2、4、5 的最后一笔交易
TRANSACTION_ID | CUST_ID | TRANSACTION_DATE | TRANSACTION_DESC
100023 | 2 | 15-12-2014 06:00 | Withdraw 1000 dollars
100022 | 5 | 14-12-2014 16:00 | Deposit 1000 dollars
100020 | 4 | 12-12-2014 15:00 | Withdraw 300 dollars
我该如何处理?
编辑:到目前为止我已经试过了
select *
from CUST_TRANSACTION
where CUST_ID IN('2', '5', '4')
and rownum <4
order by transaction_date desc
试试这个
select t1.TRANSACTION_ID ,
t1.CUST_ID ,t1.TRANSACTION_DATE ,t1.TRANSACTION_DESC from table t1
inner join
(
select CUST_ID ,min(TRANSACTION_DATE) as TRANSACTION_DATE from table
group by CUST_ID
) t2
on t1.CUST_ID=t2.CUST_ID and t1.TRANSACTION_DATE =t2.TRANSACTION_DATE
根据客户 ID 分组并获得最大值 (transaction_date)。获取包含此客户 ID 和 transaction_date 组合
的记录你应该试试这个
SELECT CUST_ID , a.TRANSACTION_ID, TRANSACTION_DATE , TRANSACTION_DESC from CUST_TRANSACTION AS a
INNER JOIN (SELECT MAX(TRANSACTION_ID) TRANSACTION_ID FROM CUST_TRANSACTION GROUP BY CUST_ID) AS b ON a.TRANSACTION_ID=b.TRANSACTION_ID
使用 rank() 获取最高项,然后 select 仅获取每个项的最高行。例如:
SELECT *
FROM (
select
transaction_id,
cust_id,
transaction_date,
transaction_desc,
rank() OVER (PARTITION BY cust_id ORDER BY cust_id, transaction_date desc) AS rank_id
from cust_transaction
) ct
WHERE ct.rank_id = 1