CodingNeed.

Engineering practice · 30 MIN

Project · Paginate a changing activity feed

A composite cursor gives each page a stable boundary.

OFFSET scans and discards earlier rows and can shift when new records arrive. Keyset pagination selects records after the last returned sort tuple. For a descending (amount,id) order, select lower amounts or the same amount with a lower id. Production APIs should validate or sign opaque cursors and bind the same filters across pages. This exercise uses a fixed cursor to focus on the predicate.

Treat the function as a small service: define a contract, maintain an invariant, and test the boundaries.

Read the example

SELECT id, amount FROM sales WHERE amount IS NOT NULL ORDER BY amount DESC, id DESC LIMIT 2;
Check the expected output
[[2,10],[1,10]]

Your challenge

Return the next two non-null sales after cursor (amount=10,id=1), as id,amount. Order by amount DESC,id DESC.

Solution cost: Potential O(log n + k) with a matching index and supported range plan; O(n log n) scan/sort otherwise. time · O(k) returned page, plus any engine sort workspace. space

Common trap

Filtering only amount < cursorAmount skips records tied with the cursor’s amount.

Further reading: SQLite query planner

Essential cookies keep your account signed in. Optional analytics is not configured on this site. Your choice does not affect access to lessons.

Read the Privacy Policy. You can change this choice in the footer.