所以我的数据库中有以下表格。
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
有人可以帮忙吗?
答案 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
保存的数据并非不必要的臃肿。
如果您需要尝试可以在单独的日志表中的日期