私は通常、「ユーザー変数を含む式の評価順序は未定義」で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
. または、2 つの別個のクエリを作成することもできます。しかし、それらはクエリとサブクエリで同じ変数を安全に定義して使用できるかどうかという私の質問には答えません。