我需要帮助或想法如何编写它,一个 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
Run Code Online (Sandbox Code Playgroud)
如果我想在 status_1 更改时选择行,则查询应选择 ID 为 1 和 5 的行,如果我正在使用 ID 为 1、3、5、7 的 status_2 行,并且如果我正在使用 status_3 所有 ID . 希望有人可以帮助我过去的所有时间。
提前致谢
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2323 次 |
| 最近记录: |