Ich habe eine Tabelle, die eine Liste von Spielen ist, die in einer SQLite3-Datenbank gespielt wurden. Das Feld "datetime" ist das Datum, an dem das Spiel beendet wurde. Das Feld "Dauer" ist die Anzahl der Sekunden, die das Spiel dauerte. Ich möchte wissen, wie viel Prozent der letzten 24 Stunden mindestens 5 Spiele gleichzeitig ausgeführt haben. Ich finde heraus, zu sagen, wie viele Spiele zu einem bestimmten Zeitpunkt ausgeführt werden:Sqlite3: Need to Cartesian Am Datum
select count(*)
from games
where strftime('%s',datetime)+0 >= 1257173442 and
strftime('%s',datetime)-duration <= 1257173442
Wenn ich einen Tisch habe, die einfach eine Liste mit jeder Sekunde war (oder alle 30 Sekunden oder so) ich ein absichtliches cartisian Produkt tun könnte dies wie:
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
gibt es eine Möglichkeit zu dieses Datum Tabelle auf den fly erstellen? Oder dass ich einen ähnlichen Effekt bekommen kann, ohne tatsächlich eine neue Tabelle erstellen zu müssen, die einfach eine Liste aller Sekunden dieser Woche ist?
Dank
Die Zahlen Tabelle Trick ist üblich, wenn Sie nicht rekursive CTE/Unterabfrage Factoring verwenden können ... –
Ja, und die Zahlen Tabelle wird in mehr als diesem speziellen Szenario nützlich sein. Sie können es immer beschränken und erhalten nur die Teilmenge, die Sie brauchen: 'Wählen Sie die Nummer aus den Zahlen Limit 100;' Es ist nur ein bequemes Konstrukt zu haben, um ... – cethegeek