Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie einen Datensatz nur dann aus, wenn der davor einen niedrigeren Wert hat

SELECT  a.ID, a.SerialNumber, 
        b.Remain_Toner_Black BeforeCount,
        a.Remain_Toner_Black AfterCount
FROM    
        (
            SELECT  A.ID, 
                    A.SerialNumber, 
                    A.Remain_Toner_Black,
                    (
                        SELECT  COUNT(*)
                        FROM    tableName c
                        WHERE   c.SerialNumber = a.SerialNumber AND
                                c.ID <= a.ID) AS RowNumber
            FROM    TableName a
        ) a
        INNER JOIN
        (
            SELECT  A.ID, 
                    A.SerialNumber, 
                    A.Remain_Toner_Black,
                    (
                        SELECT  COUNT(*)
                        FROM    tableName c
                        WHERE   c.SerialNumber = a.SerialNumber AND
                                c.ID <= a.ID) AS RowNumber
            FROM    TableName a
        ) b ON a.SerialNumber = b.SerialNumber AND
                a.RowNumber = b.RowNumber + 1
WHERE   b.Remain_Toner_Black < a.Remain_Toner_Black

AUSGABE

╔══════╦═════════════════╦═════════════╦════════════╗
║  ID  ║  SERIALNUMBER   ║ BEFORECOUNT ║ AFTERCOUNT ║
╠══════╬═════════════════╬═════════════╬════════════╣
║ 7331 ║ Z5UEBJAC900002Y ║          36 ║        100 ║
║ 7088 ║ 3960125290      ║           0 ║         93 ║
║ 7100 ║ 3960125290      ║          93 ║        100 ║
╚══════╩═════════════════╩═════════════╩════════════╝

KURZE ERLÄUTERUNG

Die obige Abfrage erzeugt eine fortlaufende Nummer, die ROW_NUMBER() nachahmt auf anderen RDBS für jede SerialNumber geordnet nach ID in aufsteigender Reihenfolge.

Die beiden Teilabfragen werden dann über die SerialNumber zusammengeführt und laufende Nummer generiert. Bei der generierten Zahl muss der Wert der ersten Unterabfrage gleich plus eins des Werts der zweiten Unterabfrage sein, um die Toneranzahl für die nächste Aufzeichnung zu erhalten.