我有两个不同的表
User_ID Locarion start_date end_date ---------- ------------- ------------- ------------- 1 South 1-1-2018 1-5-2018 2 North 1-2-2018 1-11-2018 1 East 1-5-2018 1-9-2018
User_ID User_name ---------- ------------- 1 Mary 2 Sara
使用if语句检查当前日期是否在开始日期和结束日期之间,将位置返回为当前日期
我希望它成为结果表
User_ID User_name current_location ---------- ------------- ------------- 1 Mary East 2 Sara undeined
请帮助
答案 0 :(得分:1)
使用左联接,其联接条件基于日期:
select u.user_id, u.user_name, l.location as current_location
from users u
left join location l
on l.user_id = u.user_id
and current_date between l.start_date and l.end_date;
如果没有匹配项,它将以null
的形式返回位置。要显示替代值,请使用coalesce(l.location, 'undefined')
BETWEEN
将包含开始日期和结束日期,作为有效的“位置日期”。
如果不应包括结束日期,则需要使用其他加入条件:
select u.user_id, u.user_name, l.location as current_location
from users u
left join location l
on l.user_id = u.user_id
and l.start_date >= current_date
and l.end_date < current_date;
您没有指定DBMS,但是上面是标准的ANSI SQL。
答案 1 :(得分:0)
请尝试以下查询:
select user_id,user_name,collasce(location,'undefined')
from usertable u left join locationtable l on u.user_id=l.user_id
and getdate>=startdate and getdate<=enddate
答案 2 :(得分:0)
这应该相当简单,只需在User_ID上使用内部联接,并在开始和结束日期,返回位置或未定义情况下使用case语句即可。
或者,如果有没有位置的用户和要输入位置的用户,请使用其他人指定的“左联接”,但我建议不要使用BETWEEN,除非您希望结束日期位于该日期的开始时,并且不包括整个结束日期,即直到午夜。