This is very different from doing an SQL order by 2 date columns (or for proper way to sort sql columns, which is only for 1 column). There, we would do something like:
ORDER BY CASE WHEN date_1 > date_2
THEN date_2 ELSE date_1 END
FYI, I'm using YYY-MM-DD in this example for brevity, but I also need it to work for
TIMESTAMP (YYYY-MM-DD HH:MI:SS)
I have this table:
| id | name | date_1 | date_2 | date_3 | date_4 | date_5 | date_6 | date_7 | date_8 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | John | 2008-08-11 | 2008-08-12 | 2009-08-11 | 2009-08-21 | 2009-09-11 | 2017-08-11 | 2017-09-12 | 2017-09-30 |
| 2 | Bill | 2008-09-12 | 2008-09-12 | 2008-10-12 | 2011-09-12 | 2008-09-13 | 2022-05-20 | 2022-05-21 | 2022-05-22 |
| 3 | Andy | 2008-10-13 | 2008-10-13 | 2008-10-14 | 2008-10-15 | 2008-11-01 | 2008-11-02 | 2008-11-03 | 2008-11-04 |
| 4 | Hank | 2008-11-14 | 2008-11-15 | 2008-11-16 | 2008-11-17 | 2008-12-31 | 2009-01-01 | 2009-01-02 | 2009-01-02 |
| 5 | Alex | 2008-12-15 | 2018-12-15 | 2018-12-15 | 2018-12-16 | 2018-12-17 | 2018-12-18 | 2018-12-25 | 2008-12-31 |
... But, the permutations of that give me a headache, just to think about them.
This Answer had more of a "general solution", but that was to SELECT, not to ORDER BY...
SELECT MAX(date_col)
FROM(
SELECT MAX(date_col1) AS date_col FROM some_table
UNION
SELECT MAX(date_col2) AS date_col FROM some_table
UNION
SELECT MAX(date_col3) AS date_col FROM some_table
...
)
Is there something more like that, such as could be created by iterating a loop in, say PHP or Node.js? I need something a scalable solution.
- I only need to list each
rowonce. - I want to order them each by whichever
colhas the most recent date of those I list on thatrow.
Something like:
SELECT * FROM some_table WHERE
(
GREATEST OF date_1
OR date_2
OR date_3
OR date_4
OR date_5
OR date_6
OR date_7
OR date_8
)