请问如何通过sql制定规则?

How to make a rule by sql please?

我有一个名为 flup 的 table 和一些数据,例如:

pid, flup_time, degree, oc, flup_type

1, 2018-05-06, 1, 0, 2

1, 2018-08-01, 2, 0, 3

1, 2018-08-13, 2, 0, 1

1, 2018-08-25, 2, 1, 1

1, 2018-11-20, 2, 1, 2

1, 2019-01-09, 2, 1, 2

2, 2018-06-01, 1, 0, 2

2, 2018-08-27, 2, 0, 2

2, 2018-11-30, 2, 0, 2
...

首先,找到所有数据按pid分组,对于这个pid(这里pid=1),按flup_time asc排序。给定一个时间段(比如从 2​​018-01-01 到 2019-07-01),对于每一行,制定规则:

规则 1。如果度数 = 1,则下一个 flup_time 必须在 90 天内。

规则 2。如果 degree = 2 且 oc != 1,则下一个 flup_time 必须在 15 天内。

规则 3。如果 degree = 2 且 oc = 1,则下一个 flup_time 必须在 90 天内。

我想创建一个视图 (flup_view),包含 flup 的所有列,以及更多名为 pass_check 的列。如果该行满足rule1,2,3,则pass_check = 1,否则pass_check = 2。如:

pid, flup_time, degree, oc, flup_type, pass_check

1, 2018-05-06, 1, 0, 2, -1

1, 2018-08-01, 2, 0, 3, 1

1, 2018-08-13, 2, 0, 1, 1

1, 2018-08-25, 2, 1, 1, 1

1, 2018-11-20, 2, 1, 2, 1

1, 2019-01-09, 2, 1, 2, 1

2, 2018-06-01, 1, 0, 2, -1

2, 2018-08-27, 2, 0, 2, 1

2, 2018-11-30, 2, 0, 2, 2

请问 sql 如何做到这一点?

要使此功能正常运行,您需要几个部分。我不确定您的 SQL 背景有多强,所以我也会介绍一些基础知识。

首先,为了创建规则,您需要使用 CASE WHEN: https://www.w3schools.com/sql/func_mysql_case.asp

接下来,您需要为每个ID获取以下行,您需要使用LEAD函数。这是一个总体概述: https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html 和 LAG 教程,与 LEAD 相同,但它检查上面的行而不是下面的行: http://www.mysqltutorial.org/mysql-window-functions/mysql-lag-function/ (LEAD 在 MySQL 的早期版本中不存在,所以你的版本可能没有这个)

最后,您想使用 DATE_ADD 函数比较日期: https://www.w3schools.com/sql/func_mysql_date_add.asp

会有点复杂,但这三件事应该足以让您构建所需的查询。