Databáze > Firebird a Interbase
Jak definovat dotaz pro zjištění hodnoty v konkrétní datum ...
(1/1)
DuPr:
Ahoj,
pro jednoduchost uvedu příklad:
Tabulka 1 (aktuální hodnota)
MyValue INTEGER
Tabulka 2 (archiv)
DateEdit TIMESTAMP,
OldMyValue INTEGER
Do tabulky 2 se ukládají veškeré změny položky MyValue z tabulky 1.
Potřebuju SQL dotazem zjistit, jaká byla hodnota MyValue pro konkrétní zadané datum.
Lze to?
Díky
pepak:
--- Kód: SQL ---SELECT OldMyValue FROM archiv WHERE dateedit='2013-07-02 09:02:58.887'Nebo třeba, pokud to nedokážeš určit dostatečně přesně:
--- Kód: SQL ---SELECT FIRST 1 OldMyValue FROM archiv WHERE dateedit>='2013-07-02' AND dateedit<'2013-07-03' ORDER BY dateedit DESC
DuPr:
Ono je to složitější. Pominu variantu, že v Tabulce2 nemusí být záznam, protože ještě k žádné změně nedošlo.
Př1: Tabulka2
OldMyValue | DateEdit
5 10.1.2013 (do tohoto datumu byla MyValue=5)
7 15.1.2013 (do tohoto datumu byla MyValue=7)
4 4.2.2013
Nyní je v Tabulce1 MyValue=3
Potřebuju získat např. pro 6.1.2013 => 5 nebo pro 17.1.2013 => 4 nebo pro 5.2.2013 => 3 apod.
pepak:
Tak příště piš do dotazu kompletní info. Nekompletním plýtváš časem svým i naším.
--- Kód: SQL ---SELECT FIRST 1 OldMyValueFROM tabulka2WHERE DateEdit<'2013-01-06' -- nebo jine datumORDER BY DateEdit DESCKdyž ti to nevrátí nic, tak druhým dotazem vytáhneš hodnotu z živé tabulky. Šlo by to i spojit do jednoho dotazu, ale myslím si, že to nestojí za to - pro jeden údaj to ještě jde, kdyby jich mělo být víc, tak by to asi bylo dost neefektivní.
--- Kód: SQL ---SELECT COALESCE((... ten SELECT výše ...), MyValue)FROM Tabulka1WHERE ...
DuPr:
Díky. Po upravení prvního SQL už dělá co potřebuju.
--- Kód: ---SELECT FIRST 1 OldMyValue
FROM tabulka2
WHERE DateEdit>='2013-01-06' -- nebo jine datum
ORDER BY DateEdit
--- Konec kódu ---
Navigace
[0] Seznam témat
Přejít na plnou verzi