如何编写查询以获取 SQL Server 中每个组的第一个条目? [复制]
Posted
技术标签:
【中文标题】如何编写查询以获取 SQL Server 中每个组的第一个条目? [复制]【英文标题】:How to write query to get 1st entry of each group in SQL Server? [duplicate] 【发布时间】:2021-02-14 21:30:41 【问题描述】:我想获取每个日期每辆车的第一个里程表值。 我试过这个来启动里程表,但出现错误:
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”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。 (8120) (SQLExecDirectW)")
什么是正确的方法?请帮忙!
【问题讨论】:
请阅读how to create a minimal reproducible example 并添加一些示例数据、表结构和确切的错误消息,因为没人能猜到。 “但出现错误” - 什么错误?我在这个查询中看到了至少两个问题——一个是关键字作为标识符的广泛使用,另一个是DateTime
出现在order by
子句中但没有出现在group by
子句中(这可能是错误的原因)。
请阅读sql tag info 和edit 相应问题的指南。
【参考方案1】:
我想获取每个日期每辆车的第一个里程表值。
这是一个典型的每组最大 n 问题。一种选择使用窗口函数:
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
【讨论】:
@ZoharPeled 谢谢,如果我想要最后一个条目,那么我只需将顺序更改为降序对吗?以上是关于如何编写查询以获取 SQL Server 中每个组的第一个条目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章