Sql 获取前一个不同的数字

Sql 获取前一个不同的数字,sql,google-bigquery,Sql,Google Bigquery,我有下表: id date status 1 2017-04-20 good 1 2017-04-19 bad 1 2017-04-18 bad 2 2017-04-20 ok 2 2017-04-19 ok 2 2017-04-17 ok

我有下表:

    id         date           status
    1        2017-04-20        good
    1        2017-04-19        bad
    1        2017-04-18        bad
    2        2017-04-20        ok
    2        2017-04-19        ok
    2        2017-04-17        ok
    2        2017-04-16        bad
我需要的是在每个id的status列中获取上一个不同的值

假设今天是2017年4月20日,结果如下:

        id       previous_status
        1         bad
        2         bad
之后,我想在案例陈述中使用这些信息:
状态为“好”且之前的状态为“坏”时的情况

您可以将此作为您的第一个要求:

SELECT id, status AS previous_status
FROM table_name
WHERE (id, date_col) IN (
        SELECT id, MAX(date_col)
        FROM table_name
        WHERE DATE(date_col) < "2017-04-20"
    );                       
这是使用CASE语句的第二个需求

SELECT t.id, t.status, t1.previous_status,
    CASE 
        WHEN t.status = 'good' AND t1.previous_status = 'bad' THEN 'some_value' 
        ELSE 'other_value' 
    END AS case_col
FROM table_name t
INNER JOIN (
    SELECT id, status AS previous_status
    FROM table_name
    WHERE (id, date_col) IN (
            SELECT id, MAX(date_col)
            FROM table_name
            WHERE DATE(date_col) < "2017-04-20"
        )
) t1
ON t.id = t1.id
WHERE DATE(t.date_col) = "2017-04-20";

此引用

您是否需要另一列作为状态输入输出?这与您先前删除的关于状态的问题不相关吗?我有一个主要的工作查询,如果它仍然有用的话。让我知道!