Sql 连续两个季度的查询内容
我有一个名为evaluations的表。它有4列:用户id、季度、年度、内容 我想选择连续两个季度的所有字段:当前季度为2,所以我想选择2020年第1季度和2019年第4季度的所有字段 这是我的疑问:Sql 连续两个季度的查询内容,sql,postgresql,Sql,Postgresql,我有一个名为evaluations的表。它有4列:用户id、季度、年度、内容 我想选择连续两个季度的所有字段:当前季度为2,所以我想选择2020年第1季度和2019年第4季度的所有字段 这是我的疑问: SELECT e1.user_id, e1.quarter AS last_quarter, e1.year AS last_year, e1.content AS content_last_quarter, e2.quarter AS quarter, e2.year AS year,
SELECT e1.user_id,
e1.quarter AS last_quarter,
e1.year AS last_year,
e1.content AS content_last_quarter,
e2.quarter AS quarter,
e2.year AS year,
e2.content AS content_quarter
FROM evaluations AS e1 JOIN evaluations AS e2 ON e2.user_id = e1.user_id
WHERE (e1.year = 2019)
AND (e1.quarter = 4)
AND (e2.year = 2020))
AND (e2.quarter = 1)
AND e1.deleted_at IS NULL
AND e2.deleted_at IS NULL
但如果2020年第1季度的记录存在,2019年第4季度的记录为空,反之亦然,则没有结果。我想选择是否存在其中一个或两个。有人能帮我吗
对不起,我的英语水平不好
谢谢大家! 使用条件聚合:
SELECT e.user_id,
MAX(e.quarter) FILTER (WHERE year = 2019) as last_quarter,
MAX(e.quarter) FILTER (WHERE year = 2019) as last_year,
MAX(e.content) FILTER (WHERE year = 2019) as last_content,
MAX(e.quarter) FILTER (WHERE year = 2020) as quarter,
MAX(e.quarter) FILTER (WHERE year = 2020) as year,
MAX(e.content) FILTER (WHERE year = 2020) as content
FROM evaluations e
WHERE ((e.year = 2019 AND e.quarter = 4) OR
(e.year = 2020 AND e.quarter = 1)
) AND
e.deleted_at IS NULL
GROUP BY e.user_id;
如果您只使用一个时间戳列而不是季度和年度的单独列,您的生活会轻松得多。@TimBiegeleisen不会更改表的设计。如果内容是jsonb类型内容->'a'->'b',我该怎么办?@user1174291。问一个新问题。这似乎与这个问题无关。A,只是内容->'A'>'b'::文本。非常感谢你!