sql >> Databáze >  >> RDS >> Mysql

Vyberte záznam pouze v případě, že ten před ním má nižší hodnotu

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

VÝSTUP

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

STRUČNÉ VYSVĚTLENÍ

Výše uvedený dotaz generuje pořadové číslo, které napodobuje ROW_NUMBER() na jiných RDBS pro každé SerialNumber seřazeno podle ID ve vzestupném pořadí.

Oba dílčí dotazy jsou poté spojeny pomocí SerialNumber a vygenerováno pořadové číslo. Na vygenerovaném čísle musí být hodnota v prvním dílčím dotazu rovna plus jedna z hodnoty ve druhém dílčím dotazu, aby se získal počet toneru v dalším pořadí.



  1. Jak získáte maximální možné datum v Oracle?

  2. Vytvořte pohled s klauzulí ORDER BY

  3. Operátor BETWEEN vs.>=AND <=:Existuje rozdíl ve výkonu?

  4. Převeďte hex v textové reprezentaci na desítkové číslo