Apologies in advance for a terrible subject line -- I didn't know quite how to
phrase it better.
I have the following two tables (with sample data)
CREATE TABLE geo (
id INTEGER PRIMARY KEY,
max_age TEXT,
min_age TEXT
);
geo table: 39K rows
id max_age min_age
--- ------- --------
1 Holocene Holocene
5 Cambrian Silurian
12 Cambrian Ordovician
229 Cretaceous Quaternary
CREATE TABLE intervals (
id INTEGER PRIMARY KEY,
age_bottom REAL,
age_top REAL,
name TEXT,
color TEXT
);
intervals table: ~450 rows
id age_bottom age_top name color
--- ---------- ------- ----------- -------
3 0.0117 0.0000 Holocene #FEF2E0
105 443.7000 416.0000 Silurian #B3E1B6
112 488.3000 443.7000 Ordovician #009270
421 2.5880 0.0000 Quaternary #F9F97F
122 542.0000 488.3000 Cambrian #7FA056
33 145.5000 65.5000 Cretaceous #7FC64E
Keep in mind, max_age is older than min_age, and age_bottom is older than
age_top.
The table geo can also have rows with min_age = max_age. I want a result set
with geo.id, min_age, max_age, age_bottom, age_top, name, color like so:
- every row should be for one and only one geo record. I have 39K rows in "geo"
table, so the result set should have 39K rows.
- when min_age = max_age, list the corresponding intervals.name and color
- when min_age != max_age, find the interval with the smallest different
between age_bottom and age_top that would span min_age and max_age of geo. In
other words, the interval whose age_bottom is bigger than the age_bottom of the
max_age and whose age_top is smaller than the age_top of the min_age.
I've gotten so far
SELECT g.id, max_age, min_age,
i.age_bottom, i.age_top, i.interval_name, i.interval_color
FROM geo g
LEFT JOIN intervals i_max ON g.max_age = i_max.interval_name
LEFT JOIN intervals i_min ON g.min_age = i_min.interval_name
JOIN intervals i ON
i.age_bottom >= i_max.age_bottom AND
i.age_top <= i_min.age_top
WHERE g.id = ?
ORDER BY i.age_bottom - i.age_top
LIMIT 1;
The above query finds the correct values for a single g.id, but I want a result
set with all the rows.
Suggestions?
Puneet.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users