Diskuze: Sloučení 15min hodnot do 1h
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 54.
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj kluci.
Mám tu další oříšek, teda aspoň pro mě..
Dotaz nakonec díky vám používám tento
SELECT
CAST(Datum as date) as Datum,
DATEPART(hour,Datum) as Hodina,
CAST(sum(kW)/4.0/1000 AS decimal(9,5) ) as mWh
from (SELECT DATEADD(minute,45,Datum) as Datum,kw FROM [dbo].[Pomocná_Tab_Datum_3]) X
group by
CAST(Datum as date),
DATEPART(hour,Datum)
ORDER BY
1 ASC, 2 ASC OFFSET 0 ROWS
GO
Přesný výsledek vychází na 5 desetinných míst a pro vyhodnocení
potřebuji jen 3 desetinná místa.
Ale....nemůžu zaokrouhlovat pro součet celého měsíce, protože by se mi to
rozcházelo, respektive nesouhlasilo s daty které dostávám od ČEZu pro
vyhodnocení. Oni ubírají poslední 2 desetinná místa a přičítají je do
další hodiny. Mají napsaný script.
Nějaký tip jak to v MSSql udělat?
Děkuji
Obavam se, ze tohle jednoduse udelat nepujde. Asi to bude treba obalit dalsim
selectem.
Pocitejme s tim, ze tabulka vychazi dobre, i soucty. Takze, ta je ok, jen se
nejaka cisla musi trochu upravit.
A take muze nastat, ze dany radek, kam chces pricist/odecist, nemusi
existovat.
https://docs.microsoft.com/…transact-sql?…
SELECT
FLOOR(123.45), -- 123
FLOOR(-123.45), -- -124 -- podle mne, toto je chyba, spravne by to melo dat -123, ne? ale to nebudes stejne potrebovat
FLOOR($123.45); -- 123.0000 --- ten dolar nevim, co je
floor odrezava desetinou carku
A = 34.53485
B = 53.67832
C = floor(A*1000)/1000 = floor(34534.85)/1000 = 34534/1000 = 34.534
D = (B*1000 - floor(B*1000))/1000
= (53678.32 - floor(53678.32))/1000
= (53678.32 - 53678)/1000 = 0.32/1000
= 0.00032
E = C + D = 34.534 + 0.00032
Ale, ted premyslim, ze to mozna ma byt jinak.
B = 53.67832 -- aktualni
C = 98.12345 -- nasledujici
D = (B*1000 - floor(B*1000))/1000
= (53678.32 - floor(53678.32))/1000
= (53678.32 - 53678)/1000
= 0.32/1000
= 0.00032
new B = B - D
new C = C + D
---
B = 98.12345 + 0.00032 -- aktualni (new C)
C = 22.75544 -- nasledujici
D = (B*1000 - floor(B*1000))/1000 = ... 0.00077
new B = B - D
new C = C + D
Potřebuji vzít poslední dvě čísla, tak aby zbylo číslo s tisícinou.
Tato dvě odebraná čísla přičíst k následující hodině a v této
hodině totéž, atd.. Teoreticky součet stále zůstane a vezme ty dvě
poslední čísla už sečtená z předešlého součtu..
Tvl, to je zase úkol... 😁
Zobrazeno 4 zpráv z 54.