尝试使用if/else子句创建新列时发生SQL语法错误

尝试使用if/else子句创建新列时发生SQL语法错误,sql,postgresql,Sql,Postgresql,我在PostgreSQL v9.6中使用此模式: CREATE TABLE dates ( calendar_week_start timestamp, calendar_week_end timestamp, calendar_year integer, calendar_year_category varchar(255) ); INSERT INTO dates (calendar_week_start, calendar_week_end, calendar_year,

我在PostgreSQL v9.6中使用此模式:

CREATE TABLE dates (
  calendar_week_start timestamp,
  calendar_week_end timestamp,
  calendar_year integer,
  calendar_year_category varchar(255)
);

INSERT INTO dates (calendar_week_start, calendar_week_end, calendar_year, calendar_year_category)
VALUES ((DATE'2018-01-01'), (DATE'2018-01-07'), 2018, 'Prior Year'), 
       ((DATE'2018-01-08'), (DATE'2018-01-14'), 2018, 'Prior Year'), 
       ((DATE'2018-01-15'), (DATE'2018-01-21'), 2018, 'Prior Year'),
       ((DATE'2018-01-22'), (DATE'2018-01-28'), 2018, 'Prior Year'),
       ((DATE'2019-01-01'), (DATE'2019-01-07'), 2019, 'Current Year'), 
       ((DATE'2019-01-08'), (DATE'2019-01-14'), 2019, 'Current Year'), 
       ((DATE'2019-01-15'), (DATE'2019-01-21'), 2019, 'Current Year'),
       ((DATE'2019-01-22'), (DATE'2019-01-28'), 2019, 'Current Year');
我正在尝试运行此查询以创建一个名为“latest_week”的列,该列应检查
日历周结束
日历年类别
字段,以确定日期是否为表中的最近一周,并指定一个值“是”或“否”

每当我尝试比较存在的两行的“虚拟”查询时,查询都会按预期运行。每当我尝试使用MAX(calendar\u week\u end)将日期值与最大日期值进行比较时,查询就会开始抛出错误

下面是一个返回意外错误的查询(没有给出其他信息)

但是,如果我运行这个“虚拟”查询只是比较
calendar\u week\u start
calendar\u week\u end
,那么相同的语法会起作用,我会得到一个新列
latest\u week
,所有值都如预期的那样为“否”

SELECT calendar_week_start, calendar_year_end GROUP BY calendar_week_category,
    CASE
        WHEN calendar_week_start=calendar_week_end THEN 'Yes'
        ELSE 'No'
    END
    AS latest_week
FROM dates;

如果我想在查询中使用MAX(calendar\u week\u end),正确的语法是什么?

您可以使用窗口函数。下面创建的是布尔值,而不是字符串:

SELECT d.*,
       ( 1 = row_number() over (order by calendar_week_end desc) ) as is_latest_week
FROM dates d;

您可以使用窗口函数。下面创建的是布尔值,而不是字符串:

SELECT d.*,
       ( 1 = row_number() over (order by calendar_week_end desc) ) as is_latest_week
FROM dates d;

不相关,但是:在单个日期值
(日期'2018-01-22')
周围加括号是完全没有用的,但是:在单个日期值
(日期'2018-01-22')
周围加括号是完全没有用的