从 SQL 中的值列表中获取第一个值
Getting the first value from a list of values in SQL
我有以下table
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
使用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
或根据 id
查找 min [Activity date]
日期,并使用 Id
和 [Activity date]
将结果加入 table
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]
我有以下table
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
使用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
或根据 id
查找 min [Activity date]
日期,并使用 Id
和 [Activity date]
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]