时间戳列的每小时平均值 - 在预期位置未找到 FROM 关键字
Hourly average for timestamps columns - FROM keyword not found where expected
我想获得两列的每小时平均值。列的类型是时间戳。
我试试这个:
select trunc(endtime, 'HH') as Date,
avg(extract(second from intrvl)
+ extract(minute from intrvl) * 60
+ extract(hour from intrvl) * 60 * 60
+ extract(day from intrvl) * 60 * 60 * 24) as average
from (
select (endtime - starttime) intrvl
from mytable
)
group by Date;
我完全不知道这是否是正确的方法。但查询不正确。我收到此错误:00923. 00000 - "FROM keyword not found where expected"
最后我想要一个像这样的table:
Date average
16/11/2021 08:00 5.786
16/11/2021 09:00 8.996
我怎样才能得到这个?
Date
是保留字(对于数据类型),不能将其用作别名,除非将其括在双引号中,如
SELECT TRUNC (endtime, 'HH') AS "Date",
AVG (
EXTRACT (SECOND FROM intrvl)
+ EXTRACT (MINUTE FROM intrvl) * 60
+ EXTRACT (HOUR FROM intrvl) * 60 * 60
+ EXTRACT (DAY FROM intrvl) * 60 * 60 * 24) AS average
FROM (SELECT (endtime - starttime) intrvl FROM mytable)
GROUP BY "Date";
或者,将其重命名为例如c_date
SELECT TRUNC (endtime, 'HH') AS c_date,
您需要在内部查询的 SELECT
子句中包括要在外部查询中使用的所有列,并且不能在中使用 SELECT
子句的别名同一子查询中的 GROUP BY
子句:
select trunc(endtime, 'HH') as "Date",
avg(
extract(second from intrvl)
+ extract(minute from intrvl) * 60
+ extract(hour from intrvl) * 60 * 60
+ extract(day from intrvl) * 60 * 60 * 24
) as average
from (
select endtime,
endtime - starttime AS intrvl
from mytable
)
group by trunc(endtime, 'HH');
如果你没有(或不担心)小数秒那么你也可以使用:
select trunc(endtime, 'HH') as "Date",
AVG(
(CAST(endtime AS DATE) - CAST(starttime AS DATE))
* 60 * 60 * 24
) AS average
from mytable
group by trunc(endtime, 'HH');
db<>fiddle here
我想获得两列的每小时平均值。列的类型是时间戳。
我试试这个:
select trunc(endtime, 'HH') as Date,
avg(extract(second from intrvl)
+ extract(minute from intrvl) * 60
+ extract(hour from intrvl) * 60 * 60
+ extract(day from intrvl) * 60 * 60 * 24) as average
from (
select (endtime - starttime) intrvl
from mytable
)
group by Date;
我完全不知道这是否是正确的方法。但查询不正确。我收到此错误:00923. 00000 - "FROM keyword not found where expected"
最后我想要一个像这样的table:
Date average
16/11/2021 08:00 5.786
16/11/2021 09:00 8.996
我怎样才能得到这个?
Date
是保留字(对于数据类型),不能将其用作别名,除非将其括在双引号中,如
SELECT TRUNC (endtime, 'HH') AS "Date",
AVG (
EXTRACT (SECOND FROM intrvl)
+ EXTRACT (MINUTE FROM intrvl) * 60
+ EXTRACT (HOUR FROM intrvl) * 60 * 60
+ EXTRACT (DAY FROM intrvl) * 60 * 60 * 24) AS average
FROM (SELECT (endtime - starttime) intrvl FROM mytable)
GROUP BY "Date";
或者,将其重命名为例如c_date
SELECT TRUNC (endtime, 'HH') AS c_date,
您需要在内部查询的 SELECT
子句中包括要在外部查询中使用的所有列,并且不能在中使用 SELECT
子句的别名同一子查询中的 GROUP BY
子句:
select trunc(endtime, 'HH') as "Date",
avg(
extract(second from intrvl)
+ extract(minute from intrvl) * 60
+ extract(hour from intrvl) * 60 * 60
+ extract(day from intrvl) * 60 * 60 * 24
) as average
from (
select endtime,
endtime - starttime AS intrvl
from mytable
)
group by trunc(endtime, 'HH');
如果你没有(或不担心)小数秒那么你也可以使用:
select trunc(endtime, 'HH') as "Date",
AVG(
(CAST(endtime AS DATE) - CAST(starttime AS DATE))
* 60 * 60 * 24
) AS average
from mytable
group by trunc(endtime, 'HH');
db<>fiddle here