sql >> Databasteknik >  >> RDS >> Mysql

Välj en post bara om den före den har ett lägre värde

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

OUTPUT

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

KORT FÖRKLARING

Vad frågan ovan gör är att den genererar ett sekventiellt nummer som efterliknar ROW_NUMBER() på andra RDBS för varje SerialNumber sorterad efter ID i stigande ordning.

De två underfrågorna sammanfogas sedan via SerialNumber och sekvensnummer genereras. På det genererade numret måste värdet på den första underfrågan vara lika med plus ett av värdet på den andra underfrågan för att få antalet toner vid nästa beställning.



  1. MySQL-anslutningsfel som jag aldrig har sett

  2. Hur DATEDIFF() fungerar i MariaDB

  3. EBS 12.2.5 och högre:Feljustering av inloggningssidans knapp

  4. Förstå transaktioner i SQL