MySQL选择查询日期

时间:2018-07-10 10:40:07

标签: mysql sql

我对MySql查询有疑问。

示例行如下:

----------------------------------------------------------------------------
|    date1   | date1Name |   date2    | date2Name |   date3    | date3Name |
----------------------------------------------------------------------------
| 2018-01-02 |   Steve   | 2018-01-01 |    Alex   | 2018-02-01 |    Luke   |
----------------------------------------------------------------------------

是否可以在一个查询中选择与最近日期相对应的dateXName?在这种情况下,卢克(属于date3Name)..

我尝试使用MAX和GREATEST函数,但我做不到:(

非常感谢..

3 个答案:

答案 0 :(得分:1)

您可以使用一个巨大的case表达式:

select (case when greatest(date1, date2, date3) = date1 then date1name,
             when greatest(date1, date2, date3) = date2 then date2name,
             when greatest(date1, date2, date3) = date3 then date3name
        end) as latestName
from t;

注意:这假定所有日期都不是{NULL(如您的示例)。如果发生平局,它将返回第一个值。

答案 1 :(得分:0)

您可以使用并集并按desc排序,并使用以下多查询校验代码限制1:

class Competition(object):
    def __init__(self, place, date, start_place, start_time):
        self.place = place
        self.date = date
        self.start_place = start_place
        self.start_time = start_time
        participants = []

    def registration(self, name):
        self.name = name
        participants += self.name
        return deelnemers

participant1 = Competition('Italy', '2018-05-24', 'Rome', '21:55')
participant1.registration('Tom Dumoulin')

答案 2 :(得分:0)

尝试一下

create table tst (
  date1 date, date1Name varchar(20),
  date2 date, date2Name varchar(20),
  date3 date, date3Name varchar(20)
);
insert into tst values (
    str_to_date('2018-01-02', '%Y-%m-%d'), 
    'Steve', 
    str_to_date('2018-01-01', '%Y-%m-%d'), 
    'Alex', 
    str_to_date('2018-02-01', '%Y-%m-%d'),
    'Luke');

    Select case 
                when date1 is not null and date1 = max(x.dt) Then date1Name
                when date2 is not null and date2 = max(x.dt) Then date2Name
                when date3 is not null and date3 = max(x.dt) Then date3Name
            end as val
    from ( 
    Select date1 dt from tst 
    union 
    select date2 from tst 
    union 
    select date3 from tst 
    ) x, tst

注意:如果我们不知道,这将起作用。基表中的列数和一行数