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

标签 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

基本上,我需要所有名称的第一个值,我使用了以下查询,但名称值为空白

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

最佳答案

使用窗口函数

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 

或查找每个id最短[事件日期]日期,并使用Id[将结果连接回表中事件日期]

SELECT a.ID,
       a.NAME,
       a.[Activity date],
       a.[total time]
FROM   yourtable A
       JOIN (SELECT Min([Activity date]) [Activity date],
                    ID
             FROM   yourtable) B
         ON a.id = b.id
            AND a.[Activity date] = b.[Activity date] 

关于sql - 从 SQL 中的值列表中获取第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27913412/

相关文章:

mysql - 如何根据小数的值将小数四舍五入为整数?

mysql - 需要 Netezza 中的标识符吗?

sql - 在 SQL Server 中将 varchar 转换为日期

sql - 根据两列的范围重复行

sql - 选择最后一个完整的行 block

mysql - 从 information_schema 获取所有表,MySQL

mysql - 仅当 @@hostname 等于某个值时插入一行

sql - 如何从表中获取第一个免费 ID

visual-studio-2012 - SQL Server 数据工具忽略架构比较的重构

SQL Server存储过程和SQL注入(inject)