从SQL中的值列表中获取第一个值

时间:2015-01-13 01:00:21

标签: sql sql-server-2012

我有下表

ID  Name    Activity date   total time

1   AB       1/10/2015        209

1   AB       1/11/2015       1234

1   AB       1/12/2015        10

2   CD       1/10/2015       2347

2   CD       1/11/2015         0

2   CD       1/12/2015         0

2   CD       1/13/2015         5

3   EF       1/10/2015        53

3   EF       1/11/2015        14

4   XY       1/11/2015        76

我需要以下结果

ID  Name    Activity date   total time

1   AB       1/10/2015        209

2   CD       1/10/2015        2347

3   EF       1/10/2015        53

4   XY       1/11/2015        76

基本上,我需要所有名称的第一个值,我使用下面的查询,但它给Name值的空白

SELECT distinct(Id),
FIRST_VALUE(Name) OVER (ORDER BY Id Asc) AS Name,
FIRST_VALUE(ActivityDate) OVER (ORDER BY Id Asc) AS Date,
FIRST_VALUE(TimeInQueue) OVER (ORDER BY Id Asc) AS Totaltime
FROM Historytable
GROUP BY Id,ActivityDate,Name

1 个答案:

答案 0 :(得分:3)

使用Window function

SELECT ID,
       NAME,
       [Activity date],
       total time
FROM   (SELECT Row_number() OVER(partition BY Id ORDER BY [Activity date]) Rn,
               ID,
               NAME,
               [Activity date],
               [total  time] from yourtable) A
WHERE  rn = 1 

或找到每min [Activity date]的{​​{1}}日期,然后使用idId

将结果重新加入到表中
[Activity date]