Mysql 如何将新值与表中的最后一个值进行比较

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; +----+--

我试图在MySQL数据库中创建一个触发器。我有一个有3列的表(myData)。日期、值和状态。我试图实现的是,当一个新值出现时,如果它高于上一个值,它应该在Status列中插入1。如果小于最后一个值,则应在状态列中插入0。我找不到做这件事的逻辑。有什么建议吗

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的所有日期。我想如果我有一个状态信息的专栏会很容易。但你的回答与我想要的恰恰相反。您选择的值小于上一个值!但是谢谢;)现在你知道该怎么做了;-)