使用 GROUP BY 并返回超过 2 列

Joh*_*Red 5 sql-server-2008 sql-server greatest-n-per-group

我正在尝试为表中的每个找到最新的 unit_status和该状态 ( )的时间戳cdtsunid

这是我到目前为止想出的:

with cte as 
(
    select * 
    from un_hi 
    where ag_id = 'bfd' and cdts > '201708' and
    unit_status != 'uc'
)
select distinct(unid), max(cdts2) Last_GPS_Report_Date
from cte
where unid in ('C06','C07','D01','D03','D04','D06')
group by unid
order by unid
Run Code Online (Sandbox Code Playgroud)

它正确地返回每个unid时间的他们的最新状态(max(cdts)),但我想看看有什么unit_status了。

我尝试将这个查询加入到UN_HI表中(这是数据的来源),但我无法让它工作。还有其他建议吗?

Lam*_*mak 10

您可以使用ROW_NUMBER

with cte as 
(
    select  *,
            RN = ROW_NUMBER() OVER(PARTITION BY unid ORDER BY cdts2 DESC)
    from un_hi 
    where ag_id = 'bfd' 
    and cdts > '201708' 
    and unit_status != 'uc'
)
select *
from cte
where RN = 1;
Run Code Online (Sandbox Code Playgroud)