gpt4 book ai didi

当列值更改时Mysql选择行

转载 作者:行者123 更新时间:2023-11-29 05:10:25 25 4
gpt4 key购买 nike

我需要帮助或想法如何编写它,一个 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 的行,如果我正在使用 ID 为 status_2 的行:1、3、5、7,并且如果我正在使用status_3 所有 ID。希望有人能帮助我解决过去的所有问题。

提前致谢

最佳答案

MySQL 用户定义的变量 在这种情况下会有所帮助。

每次看到新状态时,将 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

关于当列值更改时Mysql选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com