如何仅在列更改其值时选择行(从第一行到最后一行)?

时间:2015-06-03 13:27:14

标签: mysql

所以我的数据库中有以下表格。

    Date        Time       Starea 
    2015-06-02  14:01:42    0
    2015-06-02  14:01:47    0
    2015-06-02  14:01:52    0
    2015-06-02  14:01:57    0
    2015-06-02  14:02:02    0
    2015-06-02  14:02:07    1
    2015-06-02  14:02:12    1
    2015-06-02  14:02:17    0
    2015-06-02  14:02:22    0
    2015-06-02  14:02:27    0
    2015-06-02  14:02:32    1

当'starea'更改之前的值时,我需要选择,同时考虑到查询结果的第一行必须是第一行桌子。 对于上表,我的结果查询应如下所示。

Date        Time       Starea 
2015-06-02  14:01:42    0
2015-06-02  14:02:12    1
2015-06-02  14:02:17    0
2015-06-02  14:02:32    1

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以使用用户变量执行此操作。

starea在内部查询中更改的第一个标志,并且只选择外部查询中的那些行:

  SELECT f.date, f.time, f.starea
    FROM (
      SELECT date,
             time,
             starea,
             @starea IS NULL OR @starea != starea AS changed,
             @starea := starea AS working
        FROM table1
        JOIN (SELECT @starea := NULL) init
    ORDER BY date, time
          ) f
   WHERE f.changed = 1 
ORDER BY f.date, f.time

请参阅Fiddle

答案 1 :(得分:0)

表格中有3列。一个

1. Id int auto_inc pk
2. datetime
3. Starea

仅在Starea列首先更改时才插入行 SELECT * FROM the_table ORDER BY id DESC LIMIT 1

重点冗余:如果Scarea与select中的值相同,则不要插入。

解决方案只是select * from the_table order by id

保存的数据并非不必要的臃肿。

如果您需要尝试可以在单独的日志表中的日期