» Poradna » Programy

Access - rozdíl hodnot v jedné tabulce

 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Zdravím všechny ochotné lidi,začínám s Access kvůli práci. Mám v databázi vytvořenou tabulku "hodnoty".V této tabulce se zapisuje pole datum (automaticky a je klíčem) a následně hodnoty vodoměrů. Rád bych, aby se mi někam zapisoval rozdíl poslední hodnoty vodoměru s předcházejícím dnem. Ideálně do téže tabulky do posledního pole "rozdil".př.: tab "hodnoty":datum / vodomer1 / rozdil--------------------------------------01.01.2020 / 000000015 / 000002.01.2020 / 000000028 / 001303.01.2020 / 000000142 / 011404.01.2020 / 000000150 / ?????Googlil jsem jak vzteklý, ale nic nenašel.Díky moc všem za ochotu..

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 84.0.4147.89

Vytvořte si dotaz, kde si sloučíte hodnoty předchozího a aktuálního dne, kterým zároveň hodnotu rozdílu zapíšete.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Děkuji, zkusím.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Nepřišel jsem na to.kdyby šlo udělat něco ve smyslu: odečti pole1.[řádek=2] od pole1.[řádek1]

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 84.0.4147.89

Však to jde, spojíte dvě (stejné) tabulky, a z jedné vezmete jeden den, z druhé druhý a výsledek jako rozdíl uložíte do té poslední položky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 83.0.4103.116

lepší by asi bylo makro nebo rovnou VBA kód.případně do zadávacího formuláře vytáhnout poslední hodnotu a při ukládání to spočítat.S MS Accesem jsem dělal před X lety.Druhá možnost do přidávacího SQL vytáhnout podselectem poslední hodnotu daného vodoměru podle aktuálního data/času.Kdysi jsem dělal v Accessu pro firmu pomocný přehled měsíční spotřeby PHM a nákladů vozidel a agregátů, nevím jestli to ještě někde najdu je to víc než 10 let.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Díky.Tak klikací řešení bylo nahrazeno dotazem SQL syntaxí. Ještě to doladím a snad vše ok.Něco ve smyslu:SELECT (SELECT Pole1 FROM Tabulka1 WHERE ID=2)-(SELECT Pole1 FROM Tabulka1 WHERE ID=1)) ....

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 84.0.4147.89

To klikací řešení vám vygeneruje přesně tenhle SQL dotaz.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Ať jsem dělal, co jsem dělal, nedoklikal jsem se Asi nejsem holt klikací typ ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 84.0.4147.89

OK, já si zase nepamatuju přesně tu syntaxi SQL, takže tu já si doladím až po tom klikání, než bych to 20x přepisoval.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

to ti to doplní dodatečně, navíc to musíš projít ID po ID když tam bude 100 řádků musíš ten dotaz spustit 99x, navíc nebere v úvahu výměnu vodoměru nebo případné přetočení maxima.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

u googlení je třeba správně položit otázku, já našel několik případů, které by měli stačit jen poupravit pro tvé potřebyhttps://stackoverflow.com/questions/22332968/how-to... https://stackoverflow.com/questions/9994862/date-di...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

sám bych to viděl nějak takhle:select T1.datum, T1.vodomer1, coalesce(T1.vodomer1-pred.vodomer1,0) as V1_rozdílfrom tabulka T1inner join (select datum, vodomer1 from tabulka inner join (select max(datum) as datum from tabulka T2 where T2.datum < T1.datum order by datum) dt ) pred on dt.datum=pred.datumnejvnořenější select vybere předchozí datum, vyšší select vybere k datumu hodnotu stavu a hlavní to spočte, nemám momentálně, jak to odzkoušet, tak nevím zda je to přesné.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

možná ta klauzule ON z poslední řádky má být na předchozí řádce

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

jak na to koukám našel jsem další drobnost ten druhý join by měl neměl být inner ale spíš outer , potřeboval bych si to vyzkoušet, počkej do odpoledne zkusím to pak doma

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

Tak mi to nedalo a přišel jsem na totální zjednodušeníselect T1.datum, T1.vodomer1, coalesce(T1.vodomer1-pred.Vodomer1) as rozdilfrom tabulka T1left join (select top(1) datum, vodomer1 from tabulka T2 where T2.datum<T1.datum orderby desc datum) pred

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 84.0.4147.89

subselect vybere 1 (jeden) nejnovější předchozí záznam

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 83.0.4103.116

Vám všem ochotným velice děkuji. Přeji vám, ať se daří! ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět