如何对三列的日期排序并获取所有这些行的行?

问题描述

我有一个像这样的MysqL表。

    |------------------------------------------------------------------------------|
    | NAME               |  DateType   |    date1    |     date2    |     date3    |
    |------------------------------------------------------------------------------|
    | Joe Bloggs         |  d1         |  21-09-2020 |  00-00-0000  |  00-00-0000  |
    | Bob Bobbing        |  d3         |  00-00-0000 |  23-11-2020  |  21-09-2010  |
    | etc... ----------------------------------------------------------------------|

我想要的是,将这些日期合并,排序并获得如下结果:

|-------------------------------------------------|
| NAME               |  DateType   |    date      |
|-------------------------------------------------|
| Joe Bloggs         |  d1         |  21-09-2020  |
| Bob Bobbing        |  d3         |  23-11-2020  |
| Bob Bobbing        |  d3         |  21-09-2010  |
| etc... -----------------------------------------|

或者类似这样的东西,得到列名:

|----------------------------------------------------------------|
| NAME               |  DateType   |   column     |    date      |
|-------------------------------------------------|--------------|
| Joe Bloggs         |  d1         |   date1      |  21-09-2020  |
| Bob Bobbing        |  d2         |   date2      |  23-11-2020  |
| Bob Bobbing        |  d3         |   date3      |  21-09-2010  |
| etc... --------------------------------------------------------|

解决方法

您想在将所有0日期过滤掉的同时,将列取消透视成行。在MySQL中,最好的选择可能是union all

select name,datetype,'date1' which_col,date1 as date from mytable where date1 > '0000-00-00'
union all select name,'date2',date2 from mytable where date2 > '0000-00-00'
union all select name,'date',date3 from mytable where date3 > '0000-00-00'
order by name,date