Consider a CROSS JOIN
on same table, Data, that avoids reverse duplicates and same dates:
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
CROSS JOIN Data d2
WHERE d1.`Date` < d2.`Date`
AND d1.`Value` = 100 AND d2.`Value` = 100
Equivalently with INNER JOIN
and ON
clause:
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
INNER JOIN Data d2
ON d1.`Value` = d2.`Value`
AND d1.`Value` = 100
AND d1.`Date` < d2.`Date`
And for inclusion in new table, build table, Table100, and run an INSERT INTO ... SELECT
using above select query. The NOT EXISTS
in WHERE
clause is to avoid duplicate rows.
-- RUN ONLY ONCE
CREATE TABLE Table100 (
`Date1` Date,
`Date2` Date,
`Days` Integer
);
-- RUN AFTER EACH Data UPDATE
INSERT INTO Table100 (Date1, Date2, Days)
SELECT d1.`Date`, d2.`Date`, DATEDIFF(d1.Date, d2.Date) AS `Days`
FROM Data d1
INNER JOIN Data d2
ON d1.`Value` = d2.`Value`
AND d1.`Value` = 100
AND d1.`Date` < d2.`Date`
WHERE NOT EXISTS
(SELECT 1 FROM Table100 t
WHERE t.`Date1` = d1.`Date`
AND t.`Date2` = d2.`Date`);