Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie SQL
Forum PHP.pl > Forum > PHP
Pabblo
Wiam!

Potrzebuje stworzycz takie zapytanie ktore by zwrocilo wyniki pomiarow z danego dnia z bazy ale co wazne nie wszytskie tylko te co 30min. Chodzi poprostu o to zeby zmiejszyc ilosc wyswietlonych wynikow z calego dnia bo jest ich od groma. Za info z gory dzieki
skowron-line
date >= date_sub interval 30 minut
Pabblo
witam stworzylem takie zapytanie ale niestety nie dziala jak powinno:

SELECT czas, data, objetosc, przeplyw FROM woda WHERE data >= DATE_SUB(CURDATE(), INTERVAL 30 minute)

Zapytanie to powinno wyswietlic wyniki z ,czas, co 30 min posortowane od najmnieszego do najwekszego wyniku danego/aktualnego dnia. Ponizej mamy czesc tego co wyswietla: (bardzo prosze o pomoc za co z gory dziekuje)

czas data objetosc przeplyw
00:10:56 2013-01-30 1205541 0
00:08:49 2013-01-30 592636 2000
00:09:23 2013-01-30 35670 0
00:09:47 2013-01-30 187331 400
00:09:45 2013-01-30 528564 0
00:09:14 2013-01-30 364930 0
00:09:27 2013-01-30 69308 200
00:10:07 2013-01-30 130563 9000
00:10:29 2013-01-30 293682 2000
00:10:46 2013-01-30 521431 0
00:10:30 2013-01-30 5389 0
00:09:57 2013-01-30 1136377 0
00:10:03 2013-01-30 407954 1200
00:10:08 2013-01-30 113921 200
00:09:22 2013-01-30 62413 300
00:08:48 2013-01-30 119595 4000
00:09:36 2013-01-30 211630 0
00:10:26 2013-01-30 334386 200
00:10:17 2013-01-30 426686 900
styryl
A tak?
  1. SELECT czas, DATA, objetosc, przeplyw FROM woda WHERE DATA BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW())
Pabblo
niestety to zapytanie nie wyswietla zadnych wynikow moze iktos ma inna koncepcje bo ja sie czuje mocno bezsilny...
mortus
Gdyby wyniki były zapisywane w jednakowych odstępach czasu (na przykładowych danych widać, że nie są), to nie byłoby problemu:
  1. SELECT `w`.`czas`, `w`.`data`, `w`.`objetosc`, `w`.`przeplyw` FROM `woda` `w` WHERE `w`.`data` = '2013-01-30' AND TIME_TO_SEC(`w`.`czas`) % 1800 = 0 ORDER BY `w`.`czas` ASC

Na chwilę obecną powinieneś mieć 21.

Jeżeli dane nie są zapisywane w jednakowych odstępach czasu, to rozwiązanie problemu może okazać się wręcz niemożliwe, albo niewydajne, przynajmniej po stronie bazy danych.

Alternatywnie możesz spróbować pobrać np. co 5 rekord.
Pabblo
Witaj dziekuje za odpowiedz. W zapytaniu ktore przedstawiles przypuszczam, ze odwolanie do bazy odnosi sie do konkretnej wartosci czasu tj np. 4:30.00 5:00:00 5:30.00 itp. Zapytanie nie uwzgledna wartosci zapisanych w innych wymiarach czasu co za tym idze znalazl mi tylko jeden wynik podczas gdy pomiarow jest setki ... czy mozna to jakos obejsc ?
styryl
A może taki potworek

  1. SELECT
  2. objetosc,
  3. czas,
  4. CASE
  5. WHEN
  6. MINUTE(czas) >=30
  7. THEN
  8. CONCAT(HOUR(czas),":30:00")
  9. ELSE
  10. CONCAT(HOUR(czas),":00:00")
  11. END
  12. AS fixedtime
  13. FROM
  14.  
  15. woda
  16.  
  17. GROUP BY fixedtime
  18.  
  19. ORDER BY czas ASC
Pabblo
dzieki piekne...dziala super tylko sa jeszcze dwie kwestie, czy da sie to zapytanie zapisac tak aby wyrzucalo tylko wyniki z aktualnego dnia (curdate()) ? i czy da sie zrobic tak by nie wyswietlala sie tabela 'fixedtime' bo aktualnie wyglada to tak:

data objetosc czas fixedtime
2012-01-01 152441 00:07:10 0:00:00
2012-01-01 495754 00:30:31 0:30:00
2012-01-01 1791802 01:00:01 1:00:00
2012-01-01 495779 01:33:18 1:30:00
2012-01-01 495789 02:04:34 2:00:00
2012-01-01 388174 02:30:46 2:30:00
2012-01-01 495806 03:07:05 3:00:00
2012-01-01 152534 03:31:34 3:30:00
2012-01-01 70065 04:00:28 4:00:00

witam z data juz sobie poradzilem wystarczylo wrzucic polecenie WHERE data = CURDATE()...natomiast nie wiem jak ukryc kolumne fixedtime bardzo prosze o pomoc za co z gory dziekuje
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.