Portál AbcLinuxu, 11. května 2025 07:37

Dotaz: Select v MySQL s vyberem vice poli

23.1.2018 07:52 Mickey
Select v MySQL s vyberem vice poli
Přečteno: 909×
Odpovědět | Admin

Ahoj lidi. Mam takovy problemek s jednim SQL dotazem.

Mam jednoduchou tabulku, kde je sloupec datum a sloupec teplota. A potrebuju jednim dotazem vybrat datum, teplotu a teplotu pred mesicem (tedy datum-mesic).

Sesmolil jsem na to takovyto dotaz, ktery mi vsak tvrdosijne vraci jako druhou teplotu hodnotu NULL.

Pokud spustim jenom samotny dotaz, bez predchoziho SELECTU, tak to funguje dobre. SQL dotaz zde:

SELECT cas, temp_out, (SELECT temp_out FROM wwsdb AS wwsdb2 WHERE wwsdb2.cas = DATE_ADD(wwsdb.cas, INTERVAL -1 MONTH)) FROM wwsdb AS wwsdb

Nemate nekdo nejaky napad, jak to z databaze vytahnout?

Databaze obsahuje datum s presnosti na 5 min a ma v sobe zaznamy za 2 roky, takze urcite obsahuje datum treba dnesek a -1 mesic s tim samym casem.

 

Diky za pomoc.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.1.2018 09:57 EtDirloth | skóre: 11
Rozbalit Rozbalit vše Re: Select v MySQL s vyberem vice poli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vedel by si prosim k tej tabulke poskytnut aj "CREATE TABLE..." spolu s tymi hodnotami, o ktorych si myslis, ze su od seba vzdialene presne jeden mesiac vo forme "INSERT INTO ..."?
24.1.2018 07:49 Mickey
Rozbalit Rozbalit vše Re: Select v MySQL s vyberem vice poli

Ahoj. Diky za odpoved.

Nakopnul jsi me tim spravnym smerem.

Databaze obsahuje zaznamy za 5 min (takze moje zbozne prani bylo vyslyseno, viz. prispevek nize), ale zrovna na konci a na zacatku vypisu (ktery jsem sledoval) jsem zjistil, ze jsou data za predchazejici mesic nekonzistentni, proto to pise ty NULL. Jinak v ostatnim obdobi jsou vysledky v poradku.

A ja trubka jsem se porad soustredil na ten vypis, kde jsem se podival na zacatek, samy NULL, prepnul na konec a zase NULL.

A az kdyz jsi napsal, tak jsem se juknul jinam a ejhle, cisla :-)

Takze zaver: SQL dotaz je v poradku a vse funguje jak ma.

 

Diky!

23.1.2018 20:47 jekub
Rozbalit Rozbalit vše Re: Select v MySQL s vyberem vice poli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tipnu si, že Databaze obsahuje datum s presnosti na 5 min je vaše doměnka či zbožné přání. Vypište si datum vč. sekund a zkuste dohledat -měsíc. Včetně sekund.
Josef Kufner avatar 26.1.2018 10:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Select v MySQL s vyberem vice poli
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak už naznačili ostatní, bude to tím, že sice máš čas měření po peti minutách, ale budou tam drobné odchylky, takže rovnítko nezafunguje.

Spíš než cas = DATE_ADD(...) použij rozsah a nech si spočítat průměr se sousedními hodnotami: ... (SELECT AVG(temp_out) FROM wwsdb AS wwsdb2 WHERE wwsdb2.cas BETWEEN (wwsdb.cas + INTERVAL -1 MONTH - INTERVAL 7 MINUTE) AND (wwsdb.cas + INTERVAL -1 MONTH - INTERVAL 7 MINUTE)) ...

Pak ti nebude vadit, pokud nějaká hodnota náhodou bude chybět, nebo pokud bude o minutu vedle.

Pro větší množství dat takový dotaz bude značně pomalý, takže bych tento výpočet spouštěl při vkládání nových dat do databáze a výsledek si ukádal do dalšího sloupečku. Nezapomeň si udělat jeden index nad časem a teplotou, aby databáze mohla počítat jen s daty v indexu a nepotřebovala pak ještě sahat do tabulky.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 26.1.2018 10:26 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Select v MySQL s vyberem vice poli
(To poslední mínus má být samozřejmě plus.)
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.