Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何对三列的日期进行排序并获得所有这些行的行?_Mysql_Sql_Sql Order By_Union_Unpivot - Fatal编程技术网

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

Mysql 如何对三列的日期进行排序并获得所有这些行的行?,mysql,sql,sql-order-by,union,unpivot,Mysql,Sql,Sql Order By,Union,Unpivot,我有一个像这样的MySQL表 |------------------------------------------------------------------------------| | NAME | DateType | date1 | date2 | date3 | |------------------------------------------------------------

我有一个像这样的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, datetype, 'date2', date2 from mytable where date2 > '0000-00-00'
union all select name, datetype, 'date', date3 from mytable where date3 > '0000-00-00'
order by name, datetype, date

与零日期相比可能会产生奇怪的结果。。。最好与数据逻辑上最不正确但列数据类型允许值范围内的某个法定日期值进行比较。如何获取列名?(我已经编辑了这个问题)@sandepkumar:你可以在每个
联合
成员中添加一个固定值的列。我编辑了我的答案。