我需要帮助或想法如何编写它,一个mysql语句。当特定列的值更改时,我需要选择一行。此后具有相同值的行不应选择。例如,我们有一个像这样的表,用以下值填充:
ID status_1 status_2 status_3 timestamp 1 0 0 0 2016-01-01 00:00:00 2 0 0 1 2016-01-01 01:00:00 3 0 1 0 2016-01-01 02:00:00 4 0 1 1 2016-01-01 03:00:00 5 1 0 0 2016-01-01 04:00:00 6 1 0 1 2016-01-01 05:00:00 7 1 1 0 2016-01-01 06:00:00 8 1 1 1 2016-01-01 07:00:00
如果我想在status_1更改时选择行,则查询应选择ID为1和5的行,如果我正在使用status_2的ID为:1、3、5、7的行,并且如果我使用status_3的所有ID,则为ID 。希望有人可以在过去的所有时间里为我提供帮助。
提前致谢
MySQL user defined variables 在这种情况下会为您提供帮助。
MySQL user defined variables
每次看到新状态时,将1行号分配给相应的行。
1
并且,如果您看到的状态与上一行相同,请分配一个递增的行号。
这样,您最终可以过滤row number = 1仅包含的记录。这些特定记录实际上与其前一行相比显示出差异
row number = 1
SELECT * FROM ( SELECT *, IF(@prevStatus = YT.status_1, @rn := @rn + 1, IF(@prevStatus := YT.status_1, @rn := 1, @rn := 1) ) AS rn FROM your_table YT CROSS JOIN ( SELECT @prevStatus := -1, @rn := 1 ) AS var ORDER BY YT.ID ) AS t WHERE t.rn = 1 ORDER BY t.ID