MySQL SQL: 查找列值与前一行不同的行

MySQL SQL: 查找列值与前一行不同的行

在MySQL中,如果我们想要查找一个表中某列的值与前一行不同时,该怎么做呢?这就需要使用到MySQL SQL中的一些语句和函数。

首先,我们可以使用窗口函数LAG()来获取前一行的值,然后将其与当前行的值进行比较,如果不同,则选择该行。

例如,如果我们有以下的数据表:

id name score
1 Tom 85
2 Jack 78
3 Lily 90
4 Mary 90
5 Simon 64
6 Tony 88

我们想要选择score列与前一行不同的行,我们可以这样查询:

SELECT 
    id, name, score
FROM 
    (
        SELECT 
            id, name, score, 
            LAG(score) OVER (ORDER BY id) AS pre_score
        FROM 
            test
    ) AS t
WHERE 
    score != pre_score OR pre_score IS NULL;
Mysql

结果如下:

id name score
1 Tom 85
2 Jack 78
3 Lily 90
5 Simon 64
6 Tony 88

我们可以看到,行4没有被选择,因为它与前一行的score值相同。

另外,如果我们想要查找字符串列中与前一行不同的行时,可以使用MySQL内置函数ASCII()和SUBSTRING()。

例如,如果我们有以下的数据表:

id name age
1 Tom 24
2 Jack 28
3 Lily 22
4 Mary 25
5 Simon 29
6 Tony 27

我们想要选择name列与前一行不同的行,我们可以这样查询:

SELECT 
    id, name, age
FROM 
    (
        SELECT 
            id, name, age, 
            LAG(SUBSTRING(name, ASCII('a'), 1)) OVER (ORDER BY id) AS pre_name
        FROM 
            test
    ) AS t
WHERE 
    SUBSTRING(name, ASCII('a'), 1) != pre_name OR pre_name IS NULL;
Mysql

结果如下:

id name age
1 Tom 24
2 Jack 28
3 Lily 22
5 Simon 29
6 Tony 27

我们可以看到,行4没有被选择,因为它与前一行的name值相同。

阅读更多:MySQL 教程

总结

在MySQL中,我们可以使用窗口函数LAG()和一些内置函数来查找某列的值与前一行不同时的行,从而满足我们的查询需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册