如何仅在列更改其值的情况下选择行(从第一行到最后一行)?
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】:您可以使用用户变量来执行此操作。
starea
s 在内部查询中更改的第一个标志,并仅选择外部查询中的那些行:
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 宏在列标题下方添加一行并向下移动现有行?