如何在SQL Server中获取任意三行特定日期

时间:2013-02-15 09:40:21

标签: sql-server-2008 sql-server-2005

我陷入了一个SQL查询。

我的表格格式如下:

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应该是neglact。

我不知道怎么做。我想要下面想要的输出。

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查询请与我分享。

提前致谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

我找到了查询。这个查询对我来说很好。谢谢你的努力。