Složitější výběr hodnot - vzorkování a časové intervaly – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Složitější výběr hodnot - vzorkování a časové intervaly – MySQL – Fórum – Programujte.comSložitější výběr hodnot - vzorkování a časové intervaly – MySQL – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
hlucheucho+10
Posthunter
19. 6. 2014   #1
-
0
-

Mám tabulky leva_teploty  a  nazvy_a_poz.  - viz    http://leteckaposta.cz/105228839
Potřebuji hodnoy z levá_teploty, které byly naměřeny v daném období a (platila pro ně daná poznámka nebo daný název) se "vzorkováním". 

Např. pro období od '2014-04-11 11:20:30' do '2014-04-11 11:23:20' a (platila poznámka 'poznamka' nebo název '2 mereni') bez vzorkování 

set @z = '2014-04-11 11:20:30';
set @k = '2014-04-11 11:23:20';
set @u = 'pozn';
set @o = 'poznamka';
set @ud = 'nazev';
set @ob = '2 mereni';

select ta.cas, ta.teplota
from leva_teploty as ta join nazvy_a_pozn as tb on cas between @z and @k and
 ((tb.udalost = @u and tb.obsah = @o) or (tb.udalost = @ud and tb.obsah = @ob))
 and cas between tb.zacatek and tb.konec group by cas order by cas

Problém vzniká se "vzorkováním", pro vzorkování 5s by výsledek měl obsahovat hodnoty naměřené v 11:20:30, 11:20:35,  11:20:40 a pak 11:21:41, 11:21:46 atd až do 11:21:16.

Už se tu s tím "mořím" několik dní a nic funkčního jsem "nevypotil". Preferuji řešení na straně DB. Nouzová varianta je načtení intervalů platnosti názvu a poznámky do aplikace a pak dotazování do DB na hodnoty. 

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Reklama
Reklama
Flowy0
Věrný člen
19. 6. 2014   #2
-
0
-

aka je spojitost medzi 11:20:40 a 11:21:41? ako moze 11:21:46 koncit v 11:21:16?

Nahlásit jako SPAM
IP: 84.47.11.–
https://github.com/Flowy
peter
~ Anonymní uživatel
2528 příspěvků
20. 6. 2014   #3
-
0
-

Treba to mas chybne ozavorkovane? 

SET @t0 = '2014-04-11 11:20:30';
SET @t1 = '2014-04-11 11:23:20';
SET @u0 = 'pozn';
SET @p0 = 'poznamka';
SET @u1 = 'nazev';
SET @p1 = '2 mereni';

SELECT a.cas,
       a.teplota
FROM   leva_teploty a
       LEFT JOIN nazvy_a_pozn b ON b.cas = a.cas
WHERE  @t0 < cas AND cas  < @t1 -- mozna opacne znamenka
       AND ( ( b.udalost = @u0 AND b.obsah = @p0 )
          OR ( b.udalost = @u1 AND b.obsah = @p1 ) )
ORDER  BY cas 
Nahlásit jako SPAM
IP: 2001:718:2601:258:847:bdd...–
hlucheucho+10
Posthunter
20. 6. 2014   #4
-
0
-

Asi budu muset podrobněji vysvětlit.  Po pohledu do nazvy_a_pozn v období od '2014-04-11 11:20:30' do '2014-04-11 11:23:20' 
1. název měření '2 mereni' byl platný od 11:22:01 do null (není uvedeno, platí nadále)
2. poznámka s textem 'poznamka' platila od 11:20:29 do 11:20:40 a k tomu 11:21:41 do 11:23:34

... byly naměřeny v daném období a (platila pro ně daná poznámka nebo daný název) ... budou splňovat hodnoty naměřené od 11:20:30 do 11:20:40 a od 11:21:41 do 11:23:00, tyto dovede vybrat ukázkový kód. Problém nastává se "vzorkováním", to má být provedeno pro každou souvislou řadu hodnot. Mají být vybrány hodnoty v 11:20:30 a každá další po 5 s až do 11:20:40 a pak v 11:21:41 a každá další po 5 s až do 11:23:00.  Na souvislé řadě hodnot udělat takové "vzorkování" není problém (řešilo se to tu nedávno). Je problém to udělat v tomto případě na dvou ( v reálné situaci i na více) souvislých řadách.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Flowy0
Věrný člen
20. 6. 2014   #5
-
0
-

mas velmi zlu schopnost vysvetlovat to co chces ... aspon pre databazy ...

skus sem dat erd alebo aspon schemu databazy (nie nebudem stahovat subor s datami a otvarat ho kvoli scheme)

ak mas jednu tabulku s datami a druhu s intervalmi tak by to malo byt celkom jednoduche cez subquery

Nahlásit jako SPAM
IP: 91.148.1.–
https://github.com/Flowy
peter
~ Anonymní uživatel
2528 příspěvků
20. 6. 2014   #6
-
0
-

1.
A) Jestli to spravne chapu, tak chces vsechna data, ktera jsou mezi intervalem t1-t2. Nezalezi na tom, jakou to ma poznamku, ne? Nebo tam mas i jina data s jinou poznamkou?
B) Nebo chces vybrat vsechna data, ktera maji v urcitem intervalu konkretni poznamku, cili
(t1-t2 & poznamka=p1) & (t2-t3 & poznamka=p2)
2.
Pak chces z A nebo B vybrat 1 hodnotu pro 5s interval? A jak se to ma zachovat, kdyz tam nebude ani jedna hodnota? Treba budes mit vzorek dat takovyto
[3],[4,0],[0,0,0],[5,6,3],[5] vyber jedne hodnoty (mozna bych udelal prumer hodnot)
[3],[4],[0],[5],[5]
Ta nula muze byt jen chybka, ze to zrovna nemerilo, ale teplota tam na nulu nespadla.
No, jestli to chces takhle naskupinkovat GROUP BY, tak tabulka musi mit stejne hodnoty. Cili bych cas intervalu pocital jako floor(cas/x)*x kde x by byl rozsah. Tusim by to bylo pro casove razitko 1000*5 pro 5s, jestli je razitko v ms.
http://cs.wikipedia.org/wiki/%C4%8Cas#…
SELECT floor(cas/5000)*5000 AS t ...
Nemam lepsi napad pro (2.), zatim jsem nic podobne nezkousel.

Nahlásit jako SPAM
IP: 2001:718:2601:258:847:bdd...–
hlucheucho+10
Posthunter
20. 6. 2014   #7
-
0
-

#5 Flowy
ak mas jednu tabulku s datami a druhu s intervalmi tak by to malo byt celkom jednoduche cez subquery

to mám, akorát kvůli vzorkování to jednoduché není. Vybrat všechny hodnoty co v tabulce hodnot jsou a splňují podmínku "byly naměřeny v daném období a (platila pro ně daná poznámka nebo daný název)" je jednoduché, dokáže to query který jsem na ukázku sem dal. Výsledkem výběru není jedna souvislá řada dat.

Vzorkování na jedné souvislé řadě dat se řešilo  http://programujte.com/forum/vlakno/27050-vybrat-hodnoty-se-zadanym-casovym-rozestupem/  Je potřeba mít začátek ( asi i konec ) každé souvislé řady na které se to má uplatnit - zde je zakopaný pes. 

K vysvětlování: dal jsem k dispozici data a popsal, co má být výsledkem. Model konkrétní situace, která se má řešit, řekne víc než chudé schéma DB se dvěma tabulkami.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
20. 6. 2014   #8
-
0
-

Jinak:
1. Mám tabulky leva_teploty (naměřené teploty, každou sekundu 1 hodnota) a  nazvy_a_pozn (intervaly platnosti poznámek a intervaly platnosti názvů)
2. provedu 

set @z = '2014-04-11 11:20:30';
set @k = '2014-04-11 11:23:20';
set @u = 'pozn';
set @o = 'poznamka';
set @ud = 'nazev';
set @ob = '2 mereni';

select ta.cas, ta.teplota
from leva_teploty as ta join nazvy_a_pozn as tb on cas between @z and @k and
 ((tb.udalost = @u and tb.obsah = @o) or (tb.udalost = @ud and tb.obsah = @ob))
 and cas between tb.zacatek and tb.konec group by cas order by cas

získaná podmnožina dat splňují podmínku "byla naměřena v daném období a (platila pro ně daná poznámka nebo daný název)"
3. mám podmnožinu dat ze které mne zajímají pouze některá, např pro vzorkování 5s by výsledek měl obsahovat hodnoty naměřené v 11:20:30, 11:20:35,  11:20:40 a pak 11:21:41, 11:21:46 atd až do 11:21:16.

jde o výběr dat, která v leva_teploty existují. Neexistující data nebyla naměřena a nelze si je "dodělat" jakýmkoliv algoritmem.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Výběr více hodnot z checkboxu — založil já už ani nevím

Intervaly v C — založil Johny

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý