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

Posted

技术标签:

【中文标题】如何仅在列更改其值的情况下选择行(从第一行到最后一行)?【英文标题】:How do i select the rows (from the first to the last) only where a column changes its value? 【发布时间】:2015-06-03 13:27:13 【问题描述】:

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

    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

考虑到查询结果的第一行必须是第一个桌子。 对于上表,我的结果查询应如下所示。

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

谁能帮忙?

【问题讨论】:

光标(更聪明的方法) 【参考方案1】:

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

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

  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

【讨论】:

@RoscaSebastian 很高兴它对你有用.. 请接受答案。【参考方案2】:

表格中有 3 列。一个

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

仅当 Starea 列已更改为 first 时才插入一行 SELECT * FROM the_table ORDER BY id DESC LIMIT 1

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

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

保存的数据没有不必要的臃肿。

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

【讨论】:

以上是关于如何仅在列更改其值的情况下选择行(从第一行到最后一行)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Word VBA 宏在列标题下方添加一行并向下移动现有行?

清理 R 数据框,以便在列中没有行值大于下一行值的 2 倍

POSTGRES:如何仅在另一个值不存在时选择具有某个值的行,在这种情况下选择另一个值?

Excel 如何快速从第一行选到最后一行

excel如何快速选择第一行到最后一行

excel如何快速选择第一行到最后一行