尝试使用if/else子句创建新列时发生SQL语法错误
我在PostgreSQL v9.6中使用此模式:尝试使用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,
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')
周围加括号是完全没有用的