2013-02-15 44 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

相关问题