【发布时间】:2011-06-07 00:21:52
【问题描述】:
我有一个名为 Vehicle_Location 的表,其中包含列(以及更多):
ID NUMBER(10)
SEQUENCE_NUMBER NUMBER(10)
TIME DATE
我正在尝试获取每个 id 每天的最小/最大/平均记录数。
到目前为止,我已经
select id, to_char(time), count(*) as c
from vehicle_location
group by id, to_char(time), min having id = 16
这给了我:
ID TO_CHAR(TIME) COUNT(*)
---------------------- ------------- ----------------------
16 11-05-31 159
16 11-05-23 127
16 11-06-03 56
所以我想获得 count(*) 列的 min/max/avg。我使用 Oracle 作为我的 RDBMS。
【问题讨论】:
-
次要问题,但使用
TO_CHAR(TIME)获取日期组件依赖于您将NLS_DATE_FORMAT设置为不包含时间的内容。更常见的方法是使用TRUNC(TIME)。在这种情况下,我会将过滤器放在id = 16的where子句中,而不是having子句中,因为它不需要在分组后进行评估 - 两者都可以,但你可能会遇到索引使用where。