sql >> Database teknologi >  >> RDS >> Mysql

Vælg en post, bare hvis den før den har en lavere værdi

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 FORKLARING

Hvad forespørgslen ovenfor gør, er, at den genererer et sekventielt tal, som efterligner ROW_NUMBER() på andre RDBS for hvert SerialNumber sorteret efter ID i stigende rækkefølge.

De to underforespørgsler forbindes derefter via SerialNumber og sekvensnummer genereret. På det genererede tal skal værdien på den første underforespørgsel være lig med plus én af værdien på den anden underforespørgsel for at få antallet af toner ved næste genbestilling.



  1. CEILING() Eksempler i SQL Server

  2. Lær grundlæggende dataanalyse med SQL-vinduefunktioner

  3. Hvorfor giver denne MySQL-lagrede funktion andre resultater end at lave beregningen i forespørgslen?

  4. Topfunktioner at se efter i et SQL Server-overvågningsværktøj