Autor Zpráva
Prkny
Profil
Dobrý den,

přemýšlím nad vytvořením tabulky s historickými sazbami DPH. A prosím o pomoc s mysql dotazem se kterým z důvodu neznalosti nemohu vůbec pohnout...
Struktura:
id, typ_sazby, sazba, platnost_od, platnost_do
1,zakladni, 19,2008-01-01,2009-12-31
2,zakladni, 20,2010-01-01,2012-12-31
3,zakladni, 21,2013-01-01,0000-00-00

Když je u sazby platnost ukončená funguje krásně tento dotaz:
SELECT * FROM `sazby_dph` WHERE `typ_sazby` = 'zakladni' AND `platnost_od`<='2009-10-10' AND `platnost_do`>='2009-10-10'

Pokud je platnost_do = '0000-00-00' (tedy aktuální sazba) nemohu výše uvedený dotaz použít (např. pro datum 2015-05-05)
blaaablaaa
Profil
Dej platnost_do jako nullable a přidej podmínku (`platnost_do`>='2009-10-10' OR `platnost_do` IS NULL)

//EDIT: upravena logická chyba
Prkny
Profil
blaaablaaa:
To bohužel nefunguje:
Dotaz s datem 2009-10-10 odpovídá výsledku sazby 19 i 21 :
SELECT sazba FROM `sazby_dph` WHERE `typ_sazby` = 'zakladni' AND `platnost_od`<='2009-10-10' AND `platnost_do`>='2009-10-10' OR `platnost_do` IS NULL
blaaablaaa
Profil
Je tam špatně logika (`platnost_do`>='2009-10-10' OR `platnost_do` IS NULL) platnost_do musí být rovna nebo větší ke zjišťovanému datu (pak záleží na nastavení logiky - zda to platnost_do platí včetně a platnost_od tedy bude o den větší nebo naopak).
Prkny
Profil
blaaablaaa:
'platnost_od' i 'platnost_do' by měla být vždy včetně toho dne. Tedy sazba "19" by měla být vypsána u data 2008-01-01 i u data 2009-12-31.
Proto jsem se domníval, že ty rovnítka jsou OK.

Problém je, že pro datum 2009-10-10 by měla vyskočit sazba "19". Vyskakují ale 2 řádky: správně sazba "19" a špatně sazba "21" (odpovídá podmínce platnost_do IS NULL).
SELECT sazba FROM `sazby_dph` WHERE `platnost_od`<='2009-10-10' AND `platnost_do`>='2009-10-10' OR `platnost_do` IS NULL
blaaablaaa
Profil
Prkny:
Je potřeba dodržet závorky.
Prkny
Profil
blaaablaaa:
Taková školácká chyba. Velice děkuji !
Keeehi
Profil
Prkny:
Je ještě jedna možnost co se používá. Do platnost_do dáte místo 0000-00-00 nějaké hodně vzdálené datum v budoucnosti u ktereho víte, že se ten systém v tu dobu už určitě používat nebude. Například 2099-12-31.
Prkny
Profil
Keeehi:
Vidíte, to mě taky vůbec nenapadlo... :-)
Děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0