Я знаю нормально "the order of evaluation for expressions involving user variables is undefined", поэтому мы не можем безопасно определить и использовать переменную в том же самом заявлении select
. Но что, если есть подзапрос? В качестве примера, у меня есть что-то вроде этого:Определить и использовать переменную с подзапросом?
select col1,
(select min(date_)from t where i.col1=col1) as first_date,
datediff(date_, (select min(date_)from t where i.col1=col1)
) as days_since_first_date,
count(*) cnt
from t i
where anothercol in ('long','list','of','values')
group by col1,days_since_first_date;
Есть ли способ использовать (select @foo:=min(date_)from t where i.col1=col1)
безопасно вместо повторения подзапрос? Если да, могу ли я сделать это в функции datediff
или в первый раз, когда появляется подзапрос (или один)?
Конечно, я мог бы сделать
select col1,
(select min(date_)from t where i.col1=col1) as first_date,
date_,
count(*) cnt
from t i
where anothercol in ('long','list','of','values')
group by col1,date_;
, а затем сделать несколько простых постобработки, чтобы получить datediff
. Или я могу написать два отдельных запроса. Но это не отвечает на мой вопрос, а именно, можно ли безопасно определить и использовать одну и ту же переменную в запросе и в подзапросе.
Эта ссылка может быть вам полезной. http://stackoverflow.com/questions/16715504/mysql-define-a-variable-within-select-and-use-it-within-the-same-select –