2017-05-19 68 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

您可以使用頂部1的關係如下

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

其他傳統的做法是

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

謝謝!我修改了代碼如下。 –

+0

SELECT \t FGD.ID, \t FGD.FirstBatchDate FROM \t( \t \t SELECT \t \t \t ENTITYID AS 'ID', \t \t \t batchdate AS 'FirstBatchDate', \t \t \t ROWNUM = ROW_NUMBER( )OVER( \t \t \t \t partition BY entityid \t \t \t \t ORDER BY \t \t \t \t \t BatchDate \t \t \t) \t \t FROM \t \t \t GiftHeader \t)FGD WHERE \t FGD.RowNum = 1個 –

0

您可以使用ROW_NUMBER如下

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

感謝您的幫助,許克呂! –

相關問題