2017-05-19 21 views
1

トランザクションテーブルで、アカウントごとに最初のトランザクションの日付と金額を戻したいとします。テーブル(GiftHeader)は次のようになります。この場合アカウントごとの最初の日付と金額を取得するためのSQL

EntityID   Date      Amount 
1     1/1/2027 00:00:00:00  1.00 
1     2/1/2027 00:00:00:00  2.00 
2     2/1/2027 00:00:00:00  4.00 
2     3/1/2027 00:00:00:00  2.00 

、私は以下の期待:

EntityID   BatchDate     Amount 
1     1/1/2027 00:00:00:00  1.00 
2     2/1/2027 00:00:00:00  4.00 

をここで働いていない私が使用しているSQLです。

select DISTINCT entityid, min(BatchDate) as FirstGiftDate 
from GiftHeader 
group by EntityId,BatchDate 
order by EntityId 

ご協力いただければ幸いです。

よろしく、

ジョシュア・グッドウィン

答えて

1

あなたは

Select top 1 with ties * from GiftHeader 
    order by row_number() over (partition by entityid order by [BatchDate]) 

他の伝統的なアプローチ以下のようにタイでトップ1を使用することができますがあり

Select * from (
    Select *, RowN = row_number() over (partition by entityid order by BatchDate) from GiftHeader ) a 
Where a.RowN = 1 

出力:

+----------+-------------------------+--------+ 
| EntityId |  BatchDate  | Amount | 
+----------+-------------------------+--------+ 
|  1 | 2027-01-01 00:00:00.000 |  1 | 
|  2 | 2027-02-01 00:00:00.000 |  4 | 
+----------+-------------------------+--------+ 
+0

感謝をたどるようROW_NUMBERを使用することができます!私は次のようにコードを修正しました。 –

+0

\t \t (\t FROM \t FGD.ID、 \t FGD.FirstBatchDateを選択 'FirstBatchDate' AS 'ID' AS \t \t \t実体識別子、 \t \t \t batchdate、 \t \t \t ROWNUM = ROW_NUMBERを(SELECT )オーバー( \t \t \t \tパーティションBYエンティティidGiftHeader \t \t \t FROM \t \t \t \t \t BatchDate \t \t \t) \t \t BY 210 \t \t \t \t ORDER \t)FGD \t FGD.RowNum助け、シュクル用= 1回の –

0

あなたは

SELECT EntityID, 
     Date, 
     Amount 
FROM (SELECT ROW_NUMBER() 
       OVER ( 
        PARTITION BY EntityID 
        ORDER BY Date) AS RN, 
       * 
     FROM GiftHeader) a 
WHERE a.RN = 1 
+0

ありがとう! –

関連する問題