Sql 连续两个季度的查询内容

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,

我有一个名为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, 
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'::文本。非常感谢你!