样本表
================================================================
id | user_id | certificate_id | is_retraining | created_on
================================================================
1 | 1 | 1 | false | 2021-01-01
2 | 1 | 2 | false | 2021-01-02
3 | 2 | 1 | false | 2021-01-03
4 | 2 | 2 | false | 2021-03-03
5 | 3 | 1 | true | 2021-10-10
6 | 2 | 2 | true | 2021-10-10上面的示例表由Users info who completed certifications组成。用户也可以参加再培训,但他/她应该在重新学习之前完成一门课程。
User Id: 2曾在certificate 2上接受过再培训,他过去有过同样的记录(之前完成了相同的证书),但是User id: 3过去没有证书,但他直接选择了再培训。
我们如何识别过去没有证书(特别是证书)就参加再培训的用户?
理想情况下,我寻找以下结构,为所有的再培训?
=============================================
user_id | certificate_id | has_past_records
==============================================
2 | 2 | true
3 | 1 | false 发布于 2021-11-11 11:44:30
您只需使用LAG()来查找前一条记录的值。
如果上一条记录不存在,LAG()默认将返回NULL。
因此,下面的代码确定了三种可能性..。
initial-training
WITH
history AS
(
SELECT
*,
LAG(is_retraining) OVER (PARTITION BY user_id, certificate_id
ORDER BY created_on
)
AS previous_training_status
FROM
your_table
)
SELECT
user_id,
certificate_id,
CASE
WHEN previous_training_status IS NULL THEN 'never_previously_trained'
WHEN previous_training_status = true THEN 'previously_retrained'
ELSE 'previously_trained'
END
FROM
history
WHERE
is_retraining = truehttps://stackoverflow.com/questions/69927486
复制相似问题