Tengo una tabla que es una lista de juegos que se han reproducido en una base de datos sqlite3. El campo "fecha y hora" es la fecha de finalización del juego. El campo "duración" es la cantidad de segundos que duró el juego. Quiero saber qué porcentaje de las últimas 24 horas tuvo al menos 5 juegos funcionando simultaneamente. Me di cuenta de que contar el número de juegos que se ejecutan en un momento dado son:Sqlite3: Necesidad de cartesiano Fecha
select count(*)
from games
where strftime('%s',datetime)+0 >= 1257173442 and
strftime('%s',datetime)-duration <= 1257173442
Si tuviera una mesa que era simplemente una lista de cada segundo (o cada 30 segundos o algo así) que podía hacer un producto cartisian intencional de esta manera:
select count(*)
from (
select count(*) as concurrent, d.second
from games g, date d
where strftime('%s',datetime)+0 >= d.second and
strftime('%s',datetime)-duration <= d.second and
d.second >= strftime('%s','now') - 24*60*60 and
d.second <= strftime('%s','now')
group by d.second) x
where concurrent >=5
¿hay una manera de crear esta tabla fecha sobre la marcha? ¿O que puedo obtener un efecto similar a este sin tener que crear realmente una nueva tabla que es simplemente una lista de todos los segundos de esta semana?
Gracias
El truco tabla de números es común cuando no se puede utilizar la factorización recursiva CTE/subconsulta ... –
Sí, y la tabla de números será útil en más de este escenario particular. Siempre puede limitarlo y obtener solo el subconjunto que necesita: 'seleccione el número de los números límite 100;' es simplemente una construcción conveniente para tener alrededor ... – cethegeek