El bug de iPhone X más cercano a Año Nuevo
Jefe · primary-key, binary-search, nearest-neighbor, limit
Dada una tabla bugs(id, token, title, category, device, reported_at, created_at, updated_at)
con unos 10 millones de filas, encuentra el bug del dispositivo device = 'iPhone X' cuyo created_at
esté más cerca de '2019-01-01 00:00:00', antes o después. Si dos están igual de cerca, devuelve el
anterior. Devuelve las columnas (id, created_at).
Columnas esperadas
id, created_at
Pistas
Pista 1: encuentra la medianoche
created_at no está indexado pero crece con id, como en «Cuenta esos bugs». Haz una búsqueda binaria con Run (SELECT created_at FROM bugs WHERE id >= <mid> LIMIT 1) hasta saber el primer id creado a partir de 2019-01-01 00:00:00.
Pista 2: mira en ambos sentidos
El bug de iPhone X más cercano es o el primero a partir de ese id frontera o el último antes de él. Cada uno es un recorrido ordenado de la clave primaria: ORDER BY id LIMIT 1 hacia arriba, ORDER BY id DESC LIMIT 1 hacia abajo.
Pista 3: ¿a qué distancia está el siguiente?
Mira device en ids consecutivos: recorre siempre los mismos 10 dispositivos. Así que cada recorrido se detiene tras unas 10 filas. Une los dos candidatos con UNION ALL y quédate con el de menor distancia a la medianoche.