Bigquery - Where 子句 - 动态获取上个月的第一天

Bigquery - Where clause - Dynamically get 1st of previous month

我有一个日期字段已设置为字符串(不幸的是我无法更改它)显示为“2016-02-01”

我想编写一个查询,我可以使用 where 子句来始终 select 上个月。

如果有帮助,数据始终设置为一个月的 1 号。

SELECT d as m, DATE(DATE_ADD(TIMESTAMP(d) , -1, 'MONTH')) as prev_m
FROM 
  (SELECT '2016-01-01' AS d),
  (SELECT '2016-02-01' AS d),
  (SELECT '2016-03-01' AS d),
  (SELECT '2016-04-01' AS d),
  (SELECT '2016-05-01' AS d),
  (SELECT '2016-06-01' AS d),
  (SELECT '2016-07-01' AS d),
  (SELECT '2016-08-01' AS d),
  (SELECT '2016-09-01' AS d),
  (SELECT '2016-10-01' AS d),
  (SELECT '2016-11-01' AS d),
  (SELECT '2016-12-01' AS d)

Added for WHERE clause

(我意识到下面很可能是你问的)

WHERE YEAR(d) = YEAR(DATE_ADD(CURRENT_DATE(), -1, 'MONTH')) 
AND MONTH(d) = MONTH(DATE_ADD(CURRENT_DATE(), -1, 'MONTH'))

除了 Mikhail Berlyant 的回答 (date(date_add(timestamp(d),-1,'month'))) 之外,您还可以考虑构建一个 table,在一列中包含当前月份,在另一列中包含上个月。根据您的需要,此 table 还可以包含对应于六个月前、一年前等的列。然后您加入 table.