2016-11-11 3 views
0

einen Freitag Moment hat ... versucht MySQL Kriterien zu schreiben, wie folgt:SQL-WHERE-Klausel Kriterien

Ein Zeitstempel zwischen zwei Daten ALSO, der Zeitstempel als 23.59 nicht größer ist, wenn field2 a oder b

etwas wie:

(`timestamp` BETWEEN @StartDate And @EndDate) AND NOT ((`timestamp`>='23:59') AND (`Field2` NOT IN ('a','b'))) 

Dieses ein wenig aus mir aussieht, und wird die Fehlerzeichen in meinem Editor zeigt, so versuche ich, diese Form zu bestimmen, ob falsch ist, oder wenn ich verzählt habe Klammern irgendwo. Ich führe gerade einige Berechnungen auf dem Zeitstempelfeld durch, habe diese aber der Einfachheit halber weggelassen.

Alle Einsichten sind willkommen!

+0

entferne das "nicht" aus dem nicht in ('a', 'b') auch timestamp> = string 23:59? Wie viele Stunden gibt es an einem Tag? also schließt du die letzten 59,9999 Sekunden aus? – xQbert

+0

Guter Fang auf der nicht. Tatsächlich schließe ich die letzten 59 Sekunden absichtlich aus, weshalb ich die Felder a und b haben muss - das System, das die Daten liefert, ist in der letzten Minute vor der Umschaltung unzuverlässig. – Jake

+0

Dann denke ich nur, dass das nicht das einzige Ding war, das auf Anforderungen basiert, wie ich sie verstehe. – xQbert

Antwort

2

Andere als versuchen zu vermeiden OR für Indexierungszwecke etwas falsch mit so etwas?

... AND (f2 NOT IN ('a', 'b') OR ts <= '23:59')

Edit1: (wenn ich meine Boolesche Logik Transformationen richtig erinnere) es entspricht:

... AND NOT (f2 IN ('a', 'b') AND ts > '23:59')

Edit2: oder, um es anders zu sehen, die erste Version kann auf diese Weise erweitert werden:

... AND (f2 NOT IN ('a', 'b') OR (f2 IN ('a', 'b') AND ts <= '23:59'))

+0

Ich muss Datensätze mit a oder b-Werten ausschließen und größer als 23:59. Es ist möglich, dass a- oder b-Werte vorher existieren, und ich brauche diese. – Jake

+0

Es sollte dann funktionieren; Es enthält alles, was nicht "a oder b" ist und alles (einschließlich "a oder b" mit einem ts <= 23:59). _Details für weitere Erläuterungen_ – Uueerdo

+0

bearbeiten 1 funktioniert; Vielen Dank! – Jake