1

我需要将此查询从旧版迁移到标准 SQL :

SELECT MAX(FECHA)
FROM(
SELECT FECHA, DAYOFWEEK(FECHA) AS DIA
FROM(
SELECT DATE(DATE_ADD(TIMESTAMP("2017-05-29"), pos - 1, "DAY")) AS FECHA
FROM (
     SELECT ROW_NUMBER() OVER() AS pos, *
     FROM (
       FLATTEN((
         SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(CURRENT_DATE()), 
         TIMESTAMP("2017-05-29")), '.'),'') AS h
         FROM (SELECT NULL)),h
)))
))
WHERE DIA=1

查询必须返回距当前日期最近的星期天日期。

当我在标准 SQL 中运行它时,我得到

语法错误:预期的关键字 JOIN 但在 [12:2] 得到“)”(在 FROM (SELECT NULL) 之后),h

4

2 回答 2

2

查询必须返回距当前日期最近的星期天日期。

#standardSQL
SELECT 
  DATE_SUB(CURRENT_DATE(), INTERVAL EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 1 DAY)

您可以替换CURRENT_DATE()为任何日期,它将返回上一个最近的星期天

于 2017-06-26T14:31:53.723 回答
2

您可以使用DATE_TRUNC与该WEEK部分截断到最近的星期日。例如:

#standardSQL
WITH Input AS (
  SELECT date
  FROM UNNEST([
    DATE '2017-06-26',
    DATE '2017-06-24',
    DATE '2017-05-04']) AS date
)
SELECT
  date,
  FORMAT_DATE('%A', date) AS dayofweek,
  DATE_TRUNC(date, WEEK) AS previous_sunday
FROM Input;

这将返回:

+------------+-----------+-----------------+
|    date    | dayofweek | previous_sunday |
+------------+-----------+-----------------+
| 2017-06-24 | Saturday  |      2017-06-18 |
| 2017-05-04 | Thursday  |      2017-04-30 |
| 2017-06-26 | Monday    |      2017-06-25 |
+------------+-----------+-----------------+
于 2017-06-26T17:00:53.963 回答