2017-12-26 1 views
0

こんにちは、すべての2番目の最後のトランザクションを選択するにはどうすればいいですか?最後のトランザクションまで2番目のトランザクションをすべて選択する方法

トランザクションログ

------------------------------ 
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 

私は私のクライアントのすべての最後のトランザクションにすべての第二を選択します。

+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; 

はMEMBERNAMEの各タイプ内のすべてのエントリの索引付けを作成し、順序(最初のインデックスが最新transactiondateを表す意味)を降順で番号付けを指示します。この索引列から、最後の2番目のトランザクション日に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;  

Transaction_Logと仮定されるテーブル名。 これはあなたのために働くことを願っています。

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

関連する問題