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
ĐẦU RA
╔══════╦═════════════════╦═════════════╦════════════╗
║ ID ║ SERIALNUMBER ║ BEFORECOUNT ║ AFTERCOUNT ║
╠══════╬═════════════════╬═════════════╬════════════╣
║ 7331 ║ Z5UEBJAC900002Y ║ 36 ║ 100 ║
║ 7088 ║ 3960125290 ║ 0 ║ 93 ║
║ 7100 ║ 3960125290 ║ 93 ║ 100 ║
╚══════╩═════════════════╩═════════════╩════════════╝
GIẢI THÍCH SƠ LƯỢC
Điều mà truy vấn ở trên thực hiện là nó tạo ra một số tuần tự bắt chước ROW_NUMBER()
trên RDBS khác cho mọi SerialNumber
đặt hàng theo ID
theo thứ tự tăng dần.
Hai truy vấn con sau đó được nối với nhau qua SerialNumber
và số thứ tự được tạo. Trên số đã tạo, giá trị trên truy vấn con đầu tiên phải bằng cộng với một trong các giá trị trên truy vấn con thứ hai để nhận được số mực trong lần đặt hàng tiếp theo.