[QUOTE=SlaterB]
hast du einen DB-Index auf Namen, dazu robuste Kenntnisse?
ohne vielleicht in der Tat innerhalb der DB aufgeschmissen (obwohl es doch möglich erscheinen sollte…, ach ich weiß auch nicht),
mit sollte bei 130k Elementen nicht so viel los sein
wieviele Gleiche je Gruppe ist wohl auch wichtig, bzw. wieviel verschiedene Namen, was hast du da ungefähr?
ich habe gerade eine Tabelle mit 230k Elementen getestet,
Query select count(*) from table t1, table t2 where t1.id = t2.id
läuft in wenigen Sekunden mit gleicher Anzahl
Query select count(*) from table t1, table t2 where t1.attribut1 = t2.attribut2
für ein Attribut mit 6000 verschiedenen Werten (select count(distinct(t1.attribut1) from table t1
)
läuft mit Count-Ergebnis 28 Mio. in 40 sec, das ist bereits recht lahm,
ich glaube da ist Index drauf, aber ich habe da selber nicht so genaue Kenntnisse,
je weniger verschiedene Werte, desto langsamer meine Test-Query, wie sieht es bei dir hinsichtlich Name aus?[/QUOTE]Index ist auf dem Namen drauf, ja. Was intern das DBMS macht, müsste ich ebenso erst rausfinden. Verwendet wird aber H2.
In der TestDB sind es aktuell ~500. In der eigentlich verwendeten sind das bei ähnlicher Anzahl vermutlich eher 100k unterschiedliche.
[QUOTE=Timothy_Truckle;122979]mit einer oracle-DB ginge es so:
[SQL]select a.name
from tab a
where a.zeit <= :max_zeit
group by a.name
having count (a.id) > 1[/SQL]
bye
TT[/QUOTE]Schau ich mal wie das in H2 bzw HQL geht.
[QUOTE=Unregistered;122981]1. SlaterB dürfte das selbe machen wie das von TO.
-
TT macht etwas anderes.
-
Sucht z.B. nach Events die innerhalb von 7 Tagen Stattfanden.
-
Sucht nach Events die in einer bestimmten Kalenderwoche stattfanden?
Im Gegensatz zu 2 verschiebt sich das Fenster bei 1 ausgehend vom ersten Auftreten oder sehe ich hier etwas nicht?
:max_zeit wird ja von aussen gesetzt.
Es kommt jetzt darauf an was der TO möchte.
Ein Problem bei 1. ist, wenn z.B. 10 Events in einem Fenster stattfinden. Dann bekommt man hier 9 + 8 + 7 +…+ 1 Ergebnisse.
Dies lässt sich aber durch ein Group by reduzieren.
Es stellt sich halt nun die Frage ob man wirklich so viele Ergebnisse möchte und ob man mit der entstehenden Komplexität umgehen kann?
[SQL]select data3.id from
table1 as data3
where Exists (select *
from table1 as data4
data3.time < data4.time
and (data3.time+1000) > data4.time)[/SQL]
Damit würde man bei 10 Events in einem Zeitfenster nur die 9 Entsprechenden Ergebnisse bekommen.
Abhängig von der DB und deren Optimierungen kann das mit einem Subselect auch schnell laufen.[/QUOTE]
Was ich möchte: Eine Person durchläuft eine Lichtschranke. Nun gibt es zu dieser Person einen Namen und einen Zeitstempel. Ich möchte nun für ein gegebenes Intervall, bspw. 1Sek, die Personen wissen die mehrfach durch die Lichtschranke gegangen sind. Beispielsweise wenn sie den “Eingang” benutzen und sofort umdrehen und den “Ausgang” benutzen, ist Person A zweimal in 1Sek gelistet. Dadurch kann man annehmen das die Person sofort umgedreht ist.
Den Ansatz schau uch mir auch mal an. Thx