使用group by查找查询中相应列的值

时间:2015-06-11 17:04:56

标签: sql sql-server-2008

我有一个包含捐赠历史的表(id,transdate,amt to simplified),我需要计算一些总数。其中一些我可以使用最大和最小功能,但其他人我很难拔出。我需要的是:

ID

捐款数量

所有捐款的总和

第一个捐赠日期

首次捐赠(需要帮助)

上次捐款日期

上次捐款(需要帮助)

最大的捐赠日期(需要帮助)

最大的捐赠金额

除了那些需要帮助的人之外,我拥有一切。

这是一个简化的表格

CREATE TABLE [dbo].[Donations](
    [ID] [varchar](10) NULL,
    [TransactionDate] [datetime] NULL,
    [Amount] [money] NULL,
) ON [PRIMARY]

以下是一些数据

insert into Donations Values('12','3-21-2009',25)
insert into Donations Values('12','3-10-2010',25)
insert into Donations Values('12','11-21-2012',100)
insert into Donations Values('12','5-25-2013',150)
insert into Donations Values('12','6-15-2014',150)
Insert into Donations Values('17','1-1-2014',500)
insert into Donations Values('26','12-23-2007',100)
insert into Donations Values('26','5-22-2013',150)
insert into Donations Values('26','2-11-2015',500)

以下是我使用

的查询
SELECT     ID, 
               COUNT(ID) AS Donation_count, 
               SUM(Amount) AS SumofDonations, 
               MIN(TransactionDate) AS FirstDonation_date, 
               MAX(TransactionDate) AS LastDonation_date, 
               MAX(Amount) AS LargestDonation_Amount
FROM         dbo.Donations
GROUP BY ID

目前为止我的结果

... ID..Count.Sum ..... FirstDt .... LastDt LargestAmt

12 ... 5 ... 450 ... 2009年3月21日2014年6月15日... ... 150

17 ... 1 ... 500 ... 2014年1月1日2014年1月1日... ... 500

26 ... 3 ... 750 ... 2007年12月23日2015年2月11日... ... 500

任何人都可以帮我拉第一次捐赠金额(对应于第一次捐赠日期),上次捐赠金额(对应于上次捐赠日期)和最大捐赠日期(对应于最大捐赠金额)?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询。例如

SELECT         [First Donation Amt] = (SELECT TOP 1 Amount FROM Donations b WHERE b.ID=a.ID ORDER BY TransactionDate),     
               ID, 
               COUNT(ID) AS Donation_count, 
               SUM(Amount) AS SumofDonations, 
               MIN(TransactionDate) AS FirstDonation_date, 
               MAX(TransactionDate) AS LastDonation_date, 
               MAX(Amount) AS LargestDonation_Amount

FROM         dbo.Donations a
GROUP BY ID

对于每个需要的部署,您只需适当地从子查询顺序中获取最高值。这可能是最简单的。