Mysql 比较行SQL计数值的差异

Mysql 比较行SQL计数值的差异,mysql,sql,Mysql,Sql,我有一张桌子: id firstval secondval 1 4 5 2 5 4 3 3 3 4 6 6 5 7 8 6 9 8 7 3 3 8 3 3 我需要做的第一

我有一张桌子:

id     firstval    secondval     
1         4            5
2         5            4
3         3            3
4         6            6
5         7            8
6         9            8
7         3            3
8         3            3
我需要做的第一件事是计算secondval>firstval的次数。这显然没有问题

然而,我正在努力解决的问题是如何计算secondval>firstval的每个实例的下一行满足条件secondval 因此,在本例中,有两行将满足第一个规则id 1和5,第二个规则有两行,下一行id 2和6

SELECT id, @prevGreater AND secondval < firstval AS discrepancy, 
       @prevGreater := secondval > firstval AS secondGreater
FROM (SELECT * FROM YourTable ORDER BY id) AS x
CROSS JOIN (SELECT @prevGreater := false) AS init
现在,您可以根据需要使用COUNT语句:

DECLARE @YourTable TABLE 
(id int, firstval int, secondval int)

INSERT INTO @YourTable
SELECT 1, 4, 5
UNION ALL
SELECT 2, 5, 4
UNION ALL
SELECT 3, 3, 3
UNION ALL
SELECT 4, 6, 6
UNION ALL
SELECT 5, 7, 8
UNION ALL
SELECT 6, 9, 8
UNION ALL
SELECT 7, 3, 3
UNION ALL
SELECT 8, 3, 3

SELECT  ID
,CASE 
    WHEN SECONDVAL>FIRSTVAL THEN 0
    WHEN FIRSTVAL>SECONDVAL THEN 1
    ELSE 0
END AS DISCREPANCY
,CASE 
    WHEN SECONDVAL>FIRSTVAL THEN 1
    WHEN FIRSTVAL>SECONDVAL THEN 0
    ELSE 0
END AS SECONDGREATER

FROM    @YourTable

你可以试试这个。

谢谢。我将其初始化为false,否则第一行可能会被视为不一致,即使没有上一行可比较。这可能更有意义,是的。如果ID号中存在差异,该怎么办?此查询如何比较连续行?看看这把小提琴,它在第8行报告了一个不一致的地方,而它本不应该这样。
DECLARE @YourTable TABLE 
(id int, firstval int, secondval int)

INSERT INTO @YourTable
SELECT 1, 4, 5
UNION ALL
SELECT 2, 5, 4
UNION ALL
SELECT 3, 3, 3
UNION ALL
SELECT 4, 6, 6
UNION ALL
SELECT 5, 7, 8
UNION ALL
SELECT 6, 9, 8
UNION ALL
SELECT 7, 3, 3
UNION ALL
SELECT 8, 3, 3

SELECT  ID
,CASE 
    WHEN SECONDVAL>FIRSTVAL THEN 0
    WHEN FIRSTVAL>SECONDVAL THEN 1
    ELSE 0
END AS DISCREPANCY
,CASE 
    WHEN SECONDVAL>FIRSTVAL THEN 1
    WHEN FIRSTVAL>SECONDVAL THEN 0
    ELSE 0
END AS SECONDGREATER

FROM    @YourTable