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