Mysql 如何将新值与表中的最后一个值进行比较
我试图在MySQL数据库中创建一个触发器。我有一个有3列的表(myData)。日期、值和状态。我试图实现的是,当一个新值出现时,如果它高于上一个值,它应该在Status列中插入1。如果小于最后一个值,则应在状态列中插入0。我找不到做这件事的逻辑。有什么建议吗Mysql 如何将新值与表中的最后一个值进行比较,mysql,triggers,Mysql,Triggers,我试图在MySQL数据库中创建一个触发器。我有一个有3列的表(myData)。日期、值和状态。我试图实现的是,当一个新值出现时,如果它高于上一个值,它应该在Status列中插入1。如果小于最后一个值,则应在状态列中插入0。我找不到做这件事的逻辑。有什么建议吗 BEGIN IF new.Values > // what should be here? THEN INSERT INTO // END 请考虑以下内容: SELECT * FROM my_table; +----+--
BEGIN
IF new.Values > // what should be here?
THEN
INSERT INTO //
END
请考虑以下内容:
SELECT * FROM my_table;
+----+-------+
| id | value |
+----+-------+
| 1 | 2 |
| 2 | 12 |
| 3 | 13 |
| 4 | 9 |
| 5 | 7 |
| 6 | 6 |
| 7 | 8 |
| 8 | 3 |
| 9 | 10 |
| 10 | 1 |
| 11 | 18 |
| 12 | 4 |
| 13 | 6 |
| 14 | 0 |
| 15 | 2 |
| 16 | 8 |
| 17 | 14 |
| 18 | 7 |
| 19 | 15 |
| 20 | 11 |
| 21 | 12 |
| 22 | 7 |
| 23 | 20 |
| 24 | 17 |
| 25 | 8 |
| 26 | 6 |
| 27 | 6 |
| 28 | 12 |
| 29 | 3 |
| 30 | 18 |
| 31 | 1 |
| 32 | 12 |
+----+-------+
SELECT a.*
, b.value >= a.value n
FROM my_table a
LEFT
JOIN
( SELECT x.*
, MIN(y.id) next
FROM my_table x
LEFT
JOIN my_table y
ON y.id > x.id
GROUP
BY x.id
) b
ON b.next = a.id;
+----+-------+------+
| id | value | n |
+----+-------+------+
| 1 | 2 | NULL |
| 2 | 12 | 0 |
| 3 | 13 | 0 |
| 4 | 9 | 1 |
| 5 | 7 | 1 |
| 6 | 6 | 1 |
| 7 | 8 | 0 |
| 8 | 3 | 1 |
| 9 | 10 | 0 |
| 10 | 1 | 1 |
| 11 | 18 | 0 |
| 12 | 4 | 1 |
| 13 | 6 | 0 |
| 14 | 0 | 1 |
| 15 | 2 | 0 |
| 16 | 8 | 0 |
| 17 | 14 | 0 |
| 18 | 7 | 1 |
| 19 | 15 | 0 |
| 20 | 11 | 1 |
| 21 | 12 | 0 |
| 22 | 7 | 1 |
| 23 | 20 | 0 |
| 24 | 17 | 1 |
| 25 | 8 | 1 |
| 26 | 6 | 1 |
| 27 | 6 | 1 |
| 28 | 12 | 0 |
| 29 | 3 | 1 |
| 30 | 18 | 0 |
| 31 | 1 | 1 |
| 32 | 12 | 0 |
+----+-------+------+
如果您只需要n=1的行,那么查询实际上更简单
SELECT a.*
FROM my_table a
JOIN
( SELECT x.*
, MIN(y.id) next
FROM my_table x
LEFT
JOIN my_table y
ON y.id > x.id
GROUP
BY x.id
) b
ON b.next = a.id
AND b.value >= a.value;
+----+-------+
| id | value |
+----+-------+
| 4 | 9 |
| 5 | 7 |
| 6 | 6 |
| 8 | 3 |
| 10 | 1 |
| 12 | 4 |
| 14 | 0 |
| 18 | 7 |
| 20 | 11 |
| 22 | 7 |
| 24 | 17 |
| 25 | 8 |
| 26 | 6 |
| 27 | 6 |
| 29 | 3 |
| 31 | 1 |
+----+-------+
如果相等,会发生什么?为什么要存储容易删除的数据?如果相同,则插入0。我正在用这些信息做一些图表。不过,当你需要的时候,只需计算结果。我只想使用状态为1的所有日期。我想如果我有一个状态信息的专栏会很容易。但你的回答与我想要的恰恰相反。您选择的值小于上一个值!但是谢谢;)现在你知道该怎么做了;-)