2017-12-26 3 views
0

안녕하세요. 모두 두 번째 트랜잭션을 모두 선택하는 방법은 무엇입니까?마지막 트랜잭션까지 두 번째를 모두 선택하는 방법

트랜잭션 로그

------------------------------ 
ID|MemberName|TransactionDate| 
------------------------------ 
1 |Member 1 |1/1/2017  | 
------------------------------ 
2 |Member 1 |1/2/2017  | <- I want to select this transaction 
------------------------------ 
3 |Member 1 |1/3/2017  |This the last transaction of this client 
------------------------------ 
4 |Member 2 |2/1/2017  | 
------------------------------ 
5 |Member 2 |2/2/2017  |<- I want to select this transaction 
------------------------------ 
6 |Member 2 |2/3/2017  |This the last transaction of this client 

내 모든 클라이언트의 마지막 트랜잭션에 대한 모든 2를 선택합니다.

+0

입니다 .. ??? – scaisEdge

답변

1

ROW_NUMBER() 기능을 사용해보십시오 (MySQL을 사용하지 않는 경우).

SELECT A.ID, A.MEMBERNAME, A.TRANSACTIONDATE 
FROM 
(
SELECT ID, MEMBERNAME, TRANSACTIONDATE, ROW_NUMBER() OVER (PARTITION BY MEMBERNAME ORDER BY TRANSACTIONDATE DESC) AS RNUM 
FROM TRANSACTION_TABLE 
) A 
WHERE A.RNUM = 2; 

그것은 회원 이름의 각 유형 내의 모든 항목에 대해 색인을 생성하고 순서 (최신 transactiondate을 최초의 인덱스를 나타냅니다 의미)를 내림차순으로 번호를 주문한다. 이 인덱스 열에서 두 번째 마지막 트랜잭션 날짜에 대해 rnum = 2의 필터를 지정할 수 있습니다.

0
Select top(1) a.Id,a.MemberName, a.TransactionDate from (select top(2) Id,MemberName,TransactionDate from Transaction_log order by Id desc) as a order by a.Id asc;  

트랜잭션 로그로 가정합니다. 나는 이것이 당신을 위해 일하기를 바랍니다.

0

난 그냥 집계에 사용했다 아래 쿼리 같이 조인

여기
SELECT A.* FROM TRANSACTION_LOG A INNER JOIN 
(SELECT MEMBER_NAME, MAX(ID) ID FROM TRANSACTION_LOG 
GROUP BY MEMBER_NAME) B 
ON A.MEMBER_NAME=B.MEMBER_NAME AND A.ID=B.ID-1; 

사용중인을 DB SQL Fiddle DEMO

관련 문제