如何编写查询以获取 SQL 服务器中每个组的第一个条目?

How to write query to get 1st entry of each group in SQL Server?

我想获得每个日期每辆车的第一个里程表值。 我试过这个来启动里程表但出现错误:

SELECT TOP 1 
    CAST(DateTime AS DATE) AS Date, RegistrationNo, OdoMeter AS StartOdometer 
FROM 
    EventsData 
GROUP BY 
    RegistrationNo, CAST(DateTime AS DATE) 
ORDER BY 
    RegistrationNo, DateTime

我收到这个错误:

[SQL Server] 列 'EventsData.OdoMeter' 在 select 列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。 (8120) (SQLExecDirectW)")

正确的方法是什么?请帮忙!

I want to get 1st odometer value of each vehicle for each date.

这是一个典型的 greatest-n-per-group 问题。一种选择使用 window 函数:

select *
from(
    select ed.*, 
        row_number() over(partition by registrationno, convert(date, datetime) order by datetime) rn
    from eventsdata ed
) ed
where rn = 1
order by registrationno, datetime