2013-02-15 26 views
2

我在一個SQL查詢中查詢。如何在SQL Server中獲取特定日期的任何三行

我的表格式是如下:

 
Acct# AdmitDate     DOS     ChargeAmount 
12366 2011-12-07 00:00:00.000 2011-12-15 00:00:00.000 25.00 
12366 2011-12-07 00:00:00.000 2011-12-16 00:00:00.000 30.00 
12366 2011-12-07 00:00:00.000 2011-12-17 00:00:00.000 55.00 
12366 2011-12-07 00:00:00.000 2011-12-18 00:00:00.000 48.00 
12366 2011-12-07 00:00:00.000 2011-12-19 00:00:00.000 25.00 
12366 2012-01-08 00:00:00.000 2012-01-08 00:00:00.000 58.00 
12366 2012-01-08 00:00:00.000 2012-01-09 00:00:00.000 46.00 
12366 2012-01-08 00:00:00.000 2012-01-10 00:00:00.000 90.00 
12366 2012-01-08 00:00:00.000 2012-01-11 00:00:00.000 52.00 
12366 2012-01-08 00:00:00.000 2012-01-12 00:00:00.000 95.00 
12366 2012-01-08 00:00:00.000 2012-01-13 00:00:00.000 53.20 

我想只有前3 DOS一個承認自己ChargeAmount日期和總和。所有其他的DOS應該被忽略。

我不知道如何做到這一點。我想要下面的所需輸出。

 
Acct# AdmitDate     ChargeAmount 
12366 2011-12-07 00:00:00.000 128.00 
12366 2012-01-08 00:00:00.000 200.00 

僅2011-12-17至2011-12-19爲承認日期2011-12-07需要被總和,做同樣的其他承認的日期。 如果你有任何sql查詢請與我分享。

在此先感謝

+0

查看我的回答。 – 2013-02-15 11:02:56

回答

0
 
Select 
Acct#, 
AdmitDate, 
sum(ChargeAmount) ChargeAmount 
from 
(Select 
Acct#, 
AdmitDate, 
row_number() over(partition by AdmitDate order by DOS desc) RowNo, 
ChargeAmount 
from TableName 
where Acct# = @AcctNumber 
) as t 

where (RowNo = 1 or RowNo = 2 or RowNo = 3) 

group by Acct#, AdmitDate 

我已經找到了查詢。這個查詢對我來說工作正常。感謝您的努力。

1

嘗試:

SELECT TOP 3 Acct, AdmitDate, SUM(ChargeAmount) 
FROM YourTable 
GROUP BY Acct, AdmitDate 

編輯

SELECT Acct, AdmitDate, SUM(ChargeAmount) 
, RANK() OVER (PARTITION BY AdmitDate ORDER BY AdmitDate DESC) 
FROM YourTable 
GROUP BY Acct, AdmitDate 
+0

兩人都誤讀了這一位伴侶。他只想要每個帳戶三個最大ChargeAmounts並承認日期。看起來他們其中之一排名分區jobbies我一直有意學習 – 2013-02-15 09:51:59

+0

@TonyHopkinson - 剛剛編輯我的帖子,希望這可以幫助他。 – 2013-02-15 11:02:03

+0

@DarrenDavies - 您的查詢返回一個AdmitDate的所有行的ChargeAmount的總和,但我只需要總和一個承認日期的前三行。我已經顯示了上面的例子。請只做那些需要的。 – 2013-02-15 11:22:04

相關問題