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`);