提问人:Opohass 提问时间:8/23/2023 更新时间:8/23/2023 访问量:27
PostgreSQL 查询将表、日期维度表与平均飞行时间联接
postgresql query to join table date dimensions tables to average flight times
问:
我使用以下参考构建了这个查询: 在同一表中加入 2 个外键 计算出时间戳之间的秒数 并提出了这个查询来返回平均飞行时间(以秒为单位):
SELECT dp.purpose, AVG(EXTRACT(EPOCH FROM (timestamp dim_year2.year_text || '-' || dim_month2.month_text || '-' || dim_day2.day_text || ' ' || dim_hour2.hour_text || ':' || dim_minute2.minute_text || ':' || dim_second2.second_text - dim_year1.year_text || '-' || dim_month1.month_text || '-' || dim_day1.day_text || ' ' || dim_hour1.hour_text || ':' || dim_minute1.minute_text || ':' || dim_second1.second_text))) AS avg_flight_time
FROM public.fact_flights ff
INNER JOIN dim_year dim_year1 ON dim_year1.year = ff.start_year_id
INNER JOIN dim_month dim_month1 ON dim_month1.month = ff.start_month_id
INNER JOIN dim_day dim_day1 ON dim_day1.day = ff.start_day_id
INNER JOIN dim_hour dim_hour1 ON dim_hour1.hour = ff.start_hour_id
INNER JOIN dim_minute dim_minute1 ON dim_minute1.minute = ff.start_minute_id
INNER JOIN dim_second dim_second1 ON dim_second1.second = ff.start_second_id
INNER JOIN dim_year dim_year2 ON dim_year2.year = ff.end_year_id
INNER JOIN dim_month dim_month2 ON dim_month2.month = ff.end_month_id
INNER JOIN dim_day dim_day2 ON dim_day2.day = ff.end_day_id
INNER JOIN dim_hour dim_hour2 ON dim_hour2.hour = ff.end_hour_id
INNER JOIN dim_minute dim_minute2 ON dim_minute2.minute = ff.end_minute_id
INNER JOIN dim_second dim_second2 ON dim_second2.second = ff.end_second_id
INNER JOIN dim_purpose dp ON dp.purpose_id = ff.purpose
GROUP BY dp.purpose;
具体表如下: fact_flights: flight_id(id, 整数), 目的(fk dim_purpose.purpose_id), start_year_id(fk dim_year.年), start_month_id(fk dim_month.month), start_day_id(fk dim_day.day), start_hour_id(fk dim_hour.小时), start_minute_id(fk dim_minute.分钟), start_second_id(fk dim_second.秒), end_year_id(fk dim_year), end_month_id(fk dim_month.month), end_day_id(fk dim_day.day), end_hour_id(fk dim_hour.hour), end_minute_id(fk dim_minute.minute), end_second_id(fk dim_second.秒), 都是整数,除 flight_id 外,都是外键。 dim_year: 年(id,整数), year_text(varchar)。 dim_month: month(id, integer), month_text(varchar)。 dim_day: day(id, 整数), day_text(varchar)。 dim_hour: hour(id, integer), hour_text(varchar)。 dim_minute: 分钟(id,整数), minute_text(varchar)。 dim_second: second(id, 整数), second_text(varchar)。 dim_purpose: purpose_id(id, 整数), 目的(varchar)。
PGSQL在“dim_year2”上出现语法错误,我真的不知道为什么...... 感谢任何帮助过的人
我尝试将每个单独的字符串转换为时间戳,然后使用提取纪元,转换为 varchar,然后转换为时间戳,用于TO_TIMESTAMP,但都没有奏效 预计查询将返回 2 列:航班的用途以及该用途类别中所有航班的平均飞行时间
答: 暂无答案
评论
(dim_year2.year_text || ...)::timestamp)