Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 请问如何用sql来制定规则?_Mysql_Rules - Fatal编程技术网

Mysql 请问如何用sql来制定规则?

Mysql 请问如何用sql来制定规则?,mysql,rules,Mysql,Rules,我有一个名为flup的表和一些数据,如: 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

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

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_时间asc排序。给出一段时间(如2018-01-01至2019-07-01),每行制定规则:

规则1。如果度=1,则下一次flup_时间必须在90天内

规则2。如果度数=2且摄氏度=1,那么下一个flup_时间必须在15天内

规则3。如果度=2且oc=1,则下一次flup_时间必须在90天内

我想创建一个视图(flup\u视图),包含flup的所有列,以及更多名为pass\u check的列。如果行符合规则1,2,3,则通过检查=1,否则通过检查=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背景有多强,所以我也会介绍一些基础知识

首先,为了创建规则,您需要在以下情况下使用案例:

接下来,您需要为每个ID获取以下行,您需要使用LEAD函数。以下是总体概述: 还有一个LAG教程,与LEAD相同,但它检查的是上面的行,而不是下面的行: (早期版本的MySQL中不存在LEAD,因此您的版本可能没有LEAD)

最后,要使用DATE_ADD函数比较日期:


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

有关创建视图语法,请参阅。用例或如果要计算下一个flup_时间,请参见请将您的预期输出作为文本添加到问题。@P.Salmon谢谢,我将结果放在那里。但是每一行都要检查规则,这对我来说很难。谢谢,函数LEAD/LAG非常有用!