Google bigquery 如何在BigQuery中执行列移位?

Google bigquery 如何在BigQuery中执行列移位?,google-bigquery,Google Bigquery,假设我们有一个包含以下数据的数据集: timestamp,col1 1533286270,1 1533286271,2 1533286272,3 1533286273,4 1533286274,5 我想在col1_prev中获得前面的col1值,以便能够比较它们。结果应与pandas.shift-1相同 如何使用普通SQL查询实现此功能 查询结果应如下所示: timestamp,col1,col1_prev 1533286270,1,NULL 1533286271,2,1 15332862

假设我们有一个包含以下数据的数据集:

timestamp,col1

1533286270,1
1533286271,2
1533286272,3
1533286273,4
1533286274,5
我想在col1_prev中获得前面的col1值,以便能够比较它们。结果应与pandas.shift-1相同

如何使用普通SQL查询实现此功能

查询结果应如下所示:

timestamp,col1,col1_prev

1533286270,1,NULL
1533286271,2,1
1533286272,3,2
1533286273,4,3
1533286274,5,4
使用滞后功能是一种方法:

WITH
  input AS (
  SELECT
    1533286270 AS timestamp,
    1 AS col1
  UNION ALL
  SELECT
    1533286271 AS timestamp,
    2 AS col1
  UNION ALL
  SELECT
    1533286272 AS timestamp,
    3 AS col1
  UNION ALL
  SELECT
    1533286273 AS timestamp,
    4 AS col1
  UNION ALL
  SELECT
    1533286274 AS timestamp,
    5 AS col1 )
SELECT
  timestamp,
  col1,
  LAG(col1) OVER(ORDER BY col1) AS col1_prev
FROM
  input
使用滞后功能是一种方法:

WITH
  input AS (
  SELECT
    1533286270 AS timestamp,
    1 AS col1
  UNION ALL
  SELECT
    1533286271 AS timestamp,
    2 AS col1
  UNION ALL
  SELECT
    1533286272 AS timestamp,
    3 AS col1
  UNION ALL
  SELECT
    1533286273 AS timestamp,
    4 AS col1
  UNION ALL
  SELECT
    1533286274 AS timestamp,
    5 AS col1 )
SELECT
  timestamp,
  col1,
  LAG(col1) OVER(ORDER BY col1) AS col1_prev
FROM
  input

我认为在这里使用LAGcol1 OVERORDER-BY-timestamp作为col1_-prev更为相关——仅我的2美分:这是一个公平的观点。取决于OP想要实现的目标和预期输出。然而,一个简单的改变是:我认为在这里使用LAGcol1 OVERORDER BY timestamp作为col1_prev更为相关-仅我的2美分:这是一个公平的观点。取决于OP想要实现的目标和预期输出。然而,一个简单的改变是: