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
आउटपुट
╔══════╦═════════════════╦═════════════╦════════════╗
║ ID ║ SERIALNUMBER ║ BEFORECOUNT ║ AFTERCOUNT ║
╠══════╬═════════════════╬═════════════╬════════════╣
║ 7331 ║ Z5UEBJAC900002Y ║ 36 ║ 100 ║
║ 7088 ║ 3960125290 ║ 0 ║ 93 ║
║ 7100 ║ 3960125290 ║ 93 ║ 100 ║
╚══════╩═════════════════╩═════════════╩════════════╝
संक्षिप्त व्याख्या
उपरोक्त क्वेरी क्या करती है कि यह एक अनुक्रमिक संख्या उत्पन्न करती है जो ROW_NUMBER()
की नकल करती है अन्य RDBS पर प्रत्येक SerialNumber
. के लिए ID
. द्वारा आदेशित आरोही क्रम में।
फिर दो सबक्वेरी को SerialNumber
. के माध्यम से जोड़ा जाता है और अनुक्रमिक संख्या उत्पन्न। जनरेट की गई संख्या पर, पहली सबक्वेरी का मान दूसरे सबक्वेरी के मान के प्लस वन के बराबर होना चाहिए ताकि अगले रीऑर्ड पर टोनर की संख्या प्राप्त हो सके।