Ignore the mentioned problem, must have been an e-mail artefact and view creates fine. Will test all later.
RBS On Thu, Oct 17, 2019 at 11:02 AM Bart Smissaert <bart.smissa...@gmail.com> wrote: > Hi Olaf, > > Thanks, will try that out. > I have a slight problem with your first create view on Android (fine in my > Windows desktop app), objecting to: > T.ID, highlighting the dot. > I tried with giving an alias T2 to the table in the subselect, but that > made no difference. > Will try later. > > RBS > > On Thu, Oct 17, 2019 at 12:56 AM Olaf Schmidt <n...@vbrichclient.com> wrote: > >> Am 12.10.2019 um 16:47 schrieb Bart Smissaert: >> > Sorry, I forgot to tell that. It is date column with an integer number. >> > >> > ID xValue xDate >> > ---------------- >> > 1 130 40123 >> > 1 120 41232 >> > 1 140 40582 >> > 1 100 40888 >> > 1 110 42541 >> > 2 140 41225 >> > 2 130 41589 >> > 2 150 40872 >> >> Because SQLite on Android has at least CTEs available, >> (since Android 5 or so), I thought I make an attempt using them... >> >> For your above sample-set I've created a table Test this way >> (with slightly changed Column-Names + different IDs with "gaps" >> + a few more sample-records, to cover especially n=1 sets): >> >> Create Table Test(ID, xVal, xDat); >> >> Insert Into Test Values(3, 130, 40123); >> Insert Into Test Values(3, 120, 41232); >> Insert Into Test Values(3, 140, 40582); >> Insert Into Test Values(3, 100, 40888); >> Insert Into Test Values(3, 110, 42541); >> >> Insert Into Test Values(5, 140, 41225); >> Insert Into Test Values(5, 130, 41589); >> Insert Into Test Values(5, 150, 40872); >> >> Insert Into Test Values(6, 110, 41225); >> Insert Into Test Values(6, 115, 41227); >> >> Insert Into Test Values(9, 105, 41225); >> >> After the above Table-Creation + Inserts, one should >> define a "Base-View" first, which is then able to select >> appropriate aggregates (respecting your "max-4" condition): >> >> Create View vw_StdDev_Max4_Aggregates As >> Select ID, Avg(xVal) a1, Avg(xVal*xVal) a2, Count(*) n From Test T >> Where xDat In (Select xDat From Test Where T.ID=ID Order By xDat Desc >> Limit 4) >> Group By ID; >> >> Only this view above has to be adjusted, according to your >> real table- and column-names, but the following two "derived views", >> will work after these changes as well, as long as you leave the >> above view-name - and the field-names: (ID, a1, a2, n) intact. >> >> So what remains, is two more view-defs (one for the population-StdDev - >> and one with a few slight changes, to cover the sample-StdDev as well. >> >> Create View vw_StdDev_Samples As >> Select ID, n n_SampleSize, (a2-a1*a1)*n/(n-1) "s^2", ( >> With r(s2, s, i) As (Select (a2-a1*a1)*n/(n-1), 1, 1 Union All >> Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 >> Limit 32 >> ) Select s From r Order By i Desc Limit 1 >> ) s From vw_StdDev_Max4_Aggregates Where n>1 >> Union All >> Select ID, n, Null, Null From vw_StdDev_Max4_Aggregates Where n=1; >> >> Create View vw_StdDev_Populations As >> Select ID, n n_PopulationSize, (a2-a1*a1) "sigma^2", ( >> With r(s2, s, i) As (Select (a2-a1*a1), 1, 1 Union All >> Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 >> Limit 32 >> ) Select s From r Order By i Desc Limit 1 >> ) sigma From vw_StdDev_Max4_Aggregates Where n>1 >> Union All >> Select ID, n, 0, 0 From vw_StdDev_Max4_Aggregates Where n=1; >> >> ------------------------------------ >> Ok, here the result I get on my test-table, when the 3 views >> are in place, and the following gets executed: >> >> Select ID, n_PopulationSize, sigma From vw_StdDev_Populations; >> ID n sigma >> ------------------------ >> 3 4 14.7901994577491 >> 5 3 8.16496580927733 >> 6 2 2.5 >> 9 1 0 >> >> >> Select ID, n_SampleSize, s From vw_StdDev_Samples; >> ID n s >> ------------------------ >> 3 4 17.0782512765993 >> 5 3 10.0000000000001 >> 6 2 3.53553390593274 >> 9 1 null >> >> Please note the returned null (vs. the real 0) in the last result >> (done, because "unbiased estimates" are undefined for sample-size == 1) >> >> Finally for those interested, the CTE-based "iterated Square-Root", >> cut out for an isolated calculation of sqrt(2). >> >> With r(s2, s, i) As (Select 2, 1, 1 Union All >> Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 >> Limit 32 >> ) Select s From r Order By i Desc Limit 1 >> >> The max. iterations are limited to 32 - though for input-values >> in a "typical range", the iteration will usually exit earlier... >> In case of the example above -> sqrt(2), the iteration-counter >> i reached only 6 (as can be seen, when you include i alongside s >> in the final Select. >> >> With r(s2, s, i) As (Select 2, 1, 1 Union All >> Select s2, (s2>0)*(s+s2/s)*.5, i+1 From r Where Abs(s2-s*s)>1e-12 >> Limit 32 >> ) Select i, s From r Order By i Desc Limit 1 >> >> HTH >> >> Olaf >> >> >> >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@mailinglists.sqlite.org >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users