我需要帮助或想法如何编写它,一个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。希望有人可以在过去的所有时间帮助我。
提前致谢
答案 0 :(得分:3)
MySQL user defined variables
可以帮助您。
每当您看到新状态时,将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
答案 1 :(得分:0)
也许你可以作为代码提供帮助
SELECT id, IF((id NOT IN(1,3,5,6)), 1, 0) as rowStatus FROM table HAVING rowStatus = 1;
我试图解释如何使用这里的条件