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