SQL内部联接错误-无法联接两个表:“获取表的架构时出现问题。请重试。”
我对POSTGRESQL有以下请求。我不知道它是从哪里来的,但每次运行联接查询时都会出现一个错误:获取表的模式时出现问题。再试一次 背景: 我正在尝试使用名为sheets_app.tracks的数据库中的子查询获取会话表;然后,我在一个新表中重用这个子查询,以将用户映射到会话 此联接非常简单,但仍然不起作用: 这一个与左连接上的更多条件相同 你知道它是从哪里来的吗SQL内部联接错误-无法联接两个表:“获取表的架构时出现问题。请重试。”,sql,postgresql,join,left-join,Sql,Postgresql,Join,Left Join,我对POSTGRESQL有以下请求。我不知道它是从哪里来的,但每次运行联接查询时都会出现一个错误:获取表的模式时出现问题。再试一次 背景: 我正在尝试使用名为sheets_app.tracks的数据库中的子查询获取会话表;然后,我在一个新表中重用这个子查询,以将用户映射到会话 此联接非常简单,但仍然不起作用: 这一个与左连接上的更多条件相同 你知道它是从哪里来的吗 谢谢大家! 我不认为这是Postgres的错误信息。您使用哪种工具来运行这些查询?这只是一个建议,但如果每个SELECT语句有1个C
谢谢大家! 我不认为这是Postgres的错误信息。您使用哪种工具来运行这些查询?这只是一个建议,但如果每个SELECT语句有1个CTE,而不是itI中所有SELECT语句都有1个CTE,那么您的代码将更具可读性,更易于调试。我已经在pgAdmin上运行了该工具,并且我有一个等待查询完成的过程,它不会以@a_horse__的名字结束
WITH sessions as (
SELECT
user_id || '-' || row_number() over(partition by user_id order by event_timestamp) as session_id
, user_id
, event_timestamp as session_start_at
, lead(event_timestamp) over(partition by user_id order by event_timestamp) as next_session_start_at
FROM (
SELECT
user_id
, event_timestamp
, last_event_timestamp
, (event_timestamp-last_event_timestamp) as inactivity_time
FROM (
SELECT
user_id
, event_timestamp
, LAG(event_timestamp) over (PARTITION BY user_id order by timestamp) as last_event_timestamp
FROM (
SELECT
user_id
, timestamp
, EXTRACT("EPOCH" FROM timestamp) as event_timestamp
FROM
sheets_app.tracks as e
) one
) two
) event
WHERE (event.inactivity_time > 30 OR event.inactivity_time is null))
SELECT
*
FROM sessions
LEFT JOIN sheets_app.tracks on sessions.user_id = sheets_app.tracks.user_id
WITH sessions as (
SELECT
user_id || '-' || row_number() over(partition by user_id order by event_timestamp) as session_id
, user_id
, event_timestamp as session_start_at
, lead(event_timestamp) over(partition by user_id order by event_timestamp) as next_session_start_at
FROM (
SELECT
user_id
, event_timestamp
, last_event_timestamp
, (event_timestamp-last_event_timestamp) as inactivity_time
FROM (
SELECT
user_id
, event_timestamp
, LAG(event_timestamp) over (PARTITION BY user_id order by timestamp) as last_event_timestamp
FROM (
SELECT
user_id
, timestamp
, EXTRACT("EPOCH" FROM timestamp) as event_timestamp
FROM
sheets_app.tracks as e
) one
) two
) event
WHERE (event.inactivity_time > 30 OR event.inactivity_time is null))
SELECT
COUNT(*) AS sessions_count,
AVG(duration) AS average_session_duration
FROM (
SELECT
session_id
, (EXTRACT("EPOCH" FROM MIN(events.timestamp))-EXTRACT("EPOCH" FROM MAX(events.timestamp))) AS duration
FROM sessions
LEFT JOIN sheets_app.tracks as event on sessions.user_id = event.user_id
AND EXTRACT("EPOCH" FROM events.timestamp) >= sessions.session_start_at
AND EXTRACT("EPOCH" FROM events.timestamp) < sessions.next_session_start_at OR sessions.next_session_start_at is null)
GROUP BY 1
) as events