I am attempting to narrow results of an existing complex query based on conditional matches on multiple columns within the returned data set. I’ll attempt to simplify the data as much as possible here.
Assume that the following table structure represents the data that my existing complex query has already selected (here ordered by date):
+----+-----------+------+------------+
| id | remote_id | type | date |
+----+-----------+------+------------+
| 1 | 1 | A | 2011-01-01 |
| 3 | 1 | A | 2011-01-07 |
| 5 | 1 | B | 2011-01-07 |
| 4 | 1 | A | 2011-05-01 |
+----+-----------+------+------------+
I need to select from that data set based on the following criteria:
- If the pairing of
remote_idandtypeis unique to the set, return the row always - If the pairing of
remote_idandtypeis not unique to the set, take the following action:- Of the sets of rows for which the pairing of
remote_idandtypeare not unique, return only the single row for whichdateis greatest and still less than or equal to now.
- Of the sets of rows for which the pairing of
So, if today is 2011-01-10, I’d like the data set returned to be:
+----+-----------+------+------------+
| id | remote_id | type | date |
+----+-----------+------+------------+
| 3 | 1 | A | 2011-01-07 |
| 5 | 1 | B | 2011-01-07 |
+----+-----------+------+------------+
For some reason I’m having no luck wrapping my head around this one. I suspect the answer lies in good application of group by, but I just can’t grasp it. Any help is greatly appreciated!
1 Answer