pomoc w zapytaniu

0

loguję miliony takich wartosci
data war min max
08:23 20 10 30
10:23 20 10 30
12:24 40 10 30
13:20 40 10 30
13:12 40 10 30
13:13 23 10 30
13:14 23 10 30
13:15 23 10 30

jak zrobić query, zeby wyświetlał tylko przejścia date gdy wartość przekracza wartość max lub min czyli jest alarm
i czas gdy alarm się kończy, czyli jest w widełkach pomiędzy min i max

0
 
select * from Tabela
where war > max

?

2
  1. Jeśli chcesz logować tylko przejścia to musisz znać stan poprzedniego rekordu, posortuj rosnąco po dacie, potem pobaw się zmiennymi w mysql i wyświetlaj tylko jeśli poprzedni stan zmiennej jest różny
SELECT data, alarm_status FROM (
SELECT data, @status AS previous_alarm_status, @status := (war < min OR war > max) AS alarm_status FROM tabela, (SELECT @status:=false) s ORDER BY DATA ASC) t
WHERE alarm_status != previous_alarm_status
  1. Ewentualnie podzapytaniem w stylu
SELECT data FROM tabela t1 WHERE (war >= min AND war <= max) != (SELECT war >= min AND war <= max FROM tabela t2 WHERE t2.data < t1.data ORDER BY data DESC LIMIT 1)

(to zapytanie będzie cholernie wolne - milion wartości = milion podzapytań)

  1. NAJLEPIEJ:

utwórz trigger do inserta, który będzie notował w osobnym atrybucie czy nastąpiła zmiana (dodatkowe, małe jedno podzapytanie przy każdym insercie)

0
(war >= MIN AND war <= MAX)

Można również zapisać

war BETWEEN min AND max

1 użytkowników online, w tym zalogowanych: 0, gości: 1