我对MySql查询有疑问。
示例行如下:
----------------------------------------------------------------------------
| date1 | date1Name | date2 | date2Name | date3 | date3Name |
----------------------------------------------------------------------------
| 2018-01-02 | Steve | 2018-01-01 | Alex | 2018-02-01 | Luke |
----------------------------------------------------------------------------
是否可以在一个查询中选择与最近日期相对应的dateXName?在这种情况下,卢克(属于date3Name)..
我尝试使用MAX和GREATEST函数,但我做不到:(
非常感谢..
答案 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
注意:如果我们不知道,这将起作用。基表中的列数和一行数