Ahoj
algoritmus na tenhle výpočet je celkem mazanej a hlavně slušně komplikovanej počítá se to databázově (několik SQL dotazů) narozdíl od předchozí verze v BG II kde se to procházelo po keších...
nicméně... díval sem se na pár statistik a zdá se mi, že to počítá dobře...
i mě mých 31 to sčotlo dobře
problém je v tom 20.9.2014 (dneškem)... ten by tam neměl být jak říkáš ale fakt netuším jak se tam dostává a asi bych to musel zkusit přímo nad tvou DB ... nenapadá mě jak z toho zatím ven ale mám to ve sledování a zkusím na to přijít...
ještě jsem koukal a opravdu se pracuje jen s kešema co mají dtfound > 0 což znamená, že jsou nalezené
ale možná vidím problém... asi to bude něco v přechodu roku možná zamyslím se nad tím
Koukal jsem na ten komplikovanej algoritomus a nestačil jsem se divit. Tahle záležitost se dá řešit jediným dotazem, ale vzhledem k tomu, že sqlite neumí row_number (jde simulovat, ale při vyšším počtu řádků se to stává velmi neefektivní), ale i tak to jde mnohem jednodušeji:
-- načti unikátní data nálezů
drop table if exists StatorStreakInputDates;
create temp table StatorStreakInputDates (rn integer primary key, dt date);
insert into StatorStreakInputDates (dt) values ('1900-01-01');
insert into StatorStreakInputDates (dt)
select distinct
SubStr(Cast(dtfound as varchar), 1, 4) || '-' || SubStr(Cast(dtfound as varchar), 5, 2) || '-' || SubStr(Cast(dtfound as varchar), 7, 2)
from
geocache
where
dtfound > 0
order by
dtfound asc;
insert into StatorStreakInputDates (dt) values ((select Date(Max(dt), '+2 days') from StatorStreakInputDates));
-- zjisti mezery, tj. každé dva po sobě jdoucí nálezy, kde ale data nálezů nejsou po sobě jdoucí
drop table if exists StatorStreakGaps;
create temp table StatorStreakGaps (rn integer primary key, GapStart date, GapEnd date);
insert into StatorStreakGaps (GapStart, GapEnd)
select
TStart.DT GapStart, TEnd.DT GapEnd
from
StatorStreakInputDates TStart
inner join
StatorStreakInputDates TEnd on TStart.RN = TEnd.RN - 1
where
JulianDay(TEnd.DT) - JulianDay(TStart.DT) > 1;
-- z každé "mezery" vem konec a z té následující mezery vem začátek
select
Cast(Cast(JulianDay(TEnd.GapStart) - JulianDay(TStart.GapEnd) + 1 as integer) as nvarchar)
|| ', ' || Strftime('%d/%m/%Y', TStart.GapEnd)
|| ', ' || Strftime('%d/%m/%Y', TEnd.GapStart) as Result
from
StatorStreakGaps TStart
inner join
StatorStreakGaps TEnd on TStart.RN = TEnd.RN -1
order by
JulianDay(TEnd.GapStart) - JulianDay(TStart.GapEnd) desc
limit 1;
Na mojí DB to vrátí správný výsledek. Tak na to můžeš mrknout...