sql server sum列找出谁先达到了一个值

时间:2014-09-11 15:17:01

标签: sql-server sum grouping

我在这里问了一个类似的问题:

sql sum a column and also return the last time stamp

事实证明我的用例不正确,所以我需要调整我的问题。

我在SQL Server中有一个包含多个列的表。相关的是:

name
distance
create_date

我有许多人通过名字确定,每隔几天他们就会走一段距离。例如:

name     distance     create_date
john     15           09/12/2014
john     20           09/22/2014
alex     10           08/15/2014
alex     12           09/05/2014
alex     20           09/12/2014
john     8            09/30/2014
alex     30           09/14/2014
mike     12           09/10/2014

我需要的查询有3个参数:

@start_date
@end_date
@count

我需要一个在两个日期之间的查询,为每个人返回距离。但诀窍在于,对于每个人,我应该总计超过@count中指示的金额,并返回达到的日期,或者如果该人没有通过@count,则返回总和和最后的进入日期。例如,如果我使用参数:

@start_date=08/01/2014
@end_date=09/25/2014
@count=35

我希望如下:

name     distance     create_date
alex     42           09/12/2014
john     35           09/22/2014
mike     12           09/10/2014

有人对此有所了解吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据我的理解,查询特定计数的人

   select A.name,sum(A.distance),A.create_date from (select name,distance,create_date 
   from table where create_date between @start_date and @end_date)A group by A.name,A.create_date
   having sum(A.distance)>@count

那些不交叉的人

   select A.name,sum(A.distance),max(A.create_date) from (select name,distance,create_date 
   from table where create_date between @start_date and @end_date)A group by A.name
   having sum(A.distance)<@count