Hello,

On 2016-10-20 01:58, Bart Smissaert wrote:
I worked it round to get 3 consecutive drops:

[...]

       JOIN C1 AS B ON B.ID = A.ID AND B.DT = (SELECT MAX(X.DT) FROM C1 AS X
       WHERE X.ID = A.ID AND X.DT > A.DT)
       JOIN C1 AS C ON C.ID = A.ID AND C.DT = (SELECT MAX(X.DT) FROM C1 AS X
       WHERE X.ID = A.ID AND X.DT < B.DT)
       JOIN C1 AS D ON D.ID = A.ID AND D.DT = (SELECT MAX(X.DT) FROM C1 AS X
       WHERE X.ID = A.ID AND X.DT < C.DT)

Probably you have forgotten to change a direction of the first comparison.

but I must have done something wrong as it picked 62 up from this:

62 2005-01-07 44
62 2006-02-01 47
62 2006-05-22 45
62 2007-04-05 45
62 2007-08-14 45
62 2008-05-21 46
62 2009-08-24 46
62 2010-10-08 45
62 2011-12-07 47
62 2013-01-17 46
62 2014-02-25 37
62 2015-03-30 39
62 2016-09-02 40

Any idea what I did wrong?

The above mentioned JOIN was originally used to extract consecutive ISO8601_DATE triplets, so you should not change MIN to MAX, nor reverse comparison operators. If you want to have a quadruplets you should append fourth JOIN without any changes besides C to D:

JOIN C1 AS D ON D.ID = A.ID AND D.DT = (SELECT MIN(X.DT) FROM C1 AS X
       WHERE X.ID = A.ID AND X.DT > C.DT)

Optionally you can change MIN => MAX, ``>'' => ``<'' in JOIN (which results in reversed quadruplets) and do NOT reverse comparison operators in the final WHERE clause. You cannot both reverse tuplets and comparison operators in the final WHERE clause because one operation cancels an effect of other.

-- best regards

Cezary H. Noweta
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to