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