Anonymní profil RomanZ – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil RomanZ – Programujte.comAnonymní profil RomanZ – Programujte.com

 

Příspěvky odeslané z IP adresy 2a00:1028:83be:708a:355c:f6ed:f333:d86...–

RomanZ
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386988

Jo, to máš vlastně pravdu, to vrátí spoustu řádků, není to praktické.

To Peterovo řešení mne vedlo ještě k jednomu nápadu: zjistit subselectem nejbližší další záznam a vrátit jen ty, kde je později než za vteřinku. Výhoda je že pro každý výpadek se vrací jen jeden řádek a navíc zobrazuje čas pro začátek a konec výpadku. Nevýhoda jsou samozřejmě ty okrajové podmínky (co když není žádný záznam, nebo )

SELECT CAS, (select min(log2.cas) from logmereni log2 where LOG1.CAS < log2.cas) CAS2
FROM LOGMERENI LOG1
WHERE (rozdilcasu(CAS,CAS2) > 1) OR (CAS2 IS NULL)

Poznámky: malými písmeny jsem napsal subselect, aby to bylo čitelnější, ale na case sensitive databázi to takhle nebude fungovat. A pro rozdilcasu() si musíš najít odpovídající ekvivalent pro Tvou databázi - prostě nějaký výraz, který dovede vrátit rozdíl časů v sekundách. Kontrola (CAS2 IS NULL) tam je kvůli nahlášení posledního výpadku, který ještě neskončil (nemá za sebou  navazující úspěšný záznam měření).

RomanZ
MS SQL › Hledání chybějících záznamů
23. 11. 2020   #386986

SQL umí vypsat to, co v databázi je. Neumí vypisovat co v databázi není. Proto bych to řešil založením pomocné tabulky, do které bych nějakým programem nebo skriptem naplnil, v jakých časech očekávám výsledky.

Pomocná tabulka VZOR, sloupec CAS
Tabulka obsahuje seznam časů, ke kterým má existovat měření.
CAS
---
16:55:47
16:55:48
16:55:49

Tvoje tabulka LOGMERENI, sloupec START
START
-----
16:55:47
16:55:49


SELECT CAS
FROM VZOR
LEFT OUTER JOIN LOGMERENI ON LOGMERENI.START = VZOR.CAS
WHERE LOGMERENI.START IS NULL


Tento příkaz vypíše časy, ke kterým chybí měření:
16:55:48

Ale teda jestli Ti měření nepoběží celý den, tak dostaneš 3600 záznamů, že v danou vteřinu měření neproběhlo.
V tomhle je lepší Peterovo řešení. Ale ten tam zas nemá vyřešené okrajové podmínky - kdyby Ti měření celý den neběželo (neměl bys vůbec žádný záznam), tak Ti to Peterovo řešení nic nenajde.

 

 

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