在SQL Server中按用户获取表中的第一个和最后一个条目

Web*_*ere 2 sql t-sql sql-server

我有一张桌子可以捕捉用户体重和体脂百分比.我正在寻找一个sql查询,它将获得所有用户以及他们的第一个和最后一个条目(所以我可以锻炼总重量损失等)

表结构如下:

UserName NVARCHAR(128)
DateTimeStamp DateTime
BodyWeight DECIMAL(18,2)
BodyFatPercentage DECIMAL(18,2)
Run Code Online (Sandbox Code Playgroud)

我希望返回的数据如下:

Username|First Date|Weight|Body Fat Percentage|Last Date|Weight|Body Fat Percentage|
John|21 January 2015|80|25|14 February 2015|76|22|
Mary|15 January 2015|55|19|12 February 2015|53|18|
Danny|10 January 2015|75|23|10 February 2015|70|19|
Saul|05 January 2015|77|28|13 February 2015|76|27|
Run Code Online (Sandbox Code Playgroud)

提前致谢

And*_*mar 7

您可以为每个用户分配升序和降序行号.该用户的第一个条目具有升序row_number1,最后一个条目具有降序row_number1.例如:

select  UserName
,       max(case when rn1 = 1 then DateTimeStamp end) as FirstDate
,       max(case when rn1 = 1 then BodyWeight end) as BW
,       max(case when rn1 = 1 then BodyFatPercentage end) as BFP
,       max(case when rn2 = 1 then DateTimeStamp end) as LastDate
,       max(case when rn2 = 1 then BodyWeight end) as BW
,       max(case when rn2 = 1 then BodyFatPercentage end) as BFP
from    (
        select  row_number() over (
                    partition by UserName
                    order by DateTimeStamp) rn1
        ,       row_number() over (
                    partition by UserName
                    order by DateTimeStamp desc) rn2
        ,       *
        from    YourTable
        ) as SubQueryAlias
group by
        UserName
Run Code Online (Sandbox Code Playgroud)