1

私はこのクエリを持っています:

set @last_uid = 0;
set @last_tm = '00:00';
set @last_vid = 0;

SELECT v.*,
     CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
     THEN 
          if( (@last_tm := timestamp ), @last_vid, @last_vid)
     ELSE 
          if( (@last_uid := visitorid) + (@last_vid := @last_vid+1) +(@last_tm := timestamp ),@last_vid, @last_vid )
     END  AS newVisitID

FROM visits v
ORDER BY timestamp DESC, visitorid

次のように WHERE 句で newVisitID 列を使用しようとしました。

WHERE newVisitID <=5

これは私にエラーを与えます:

#1054 - Unknown column 'newVisitID' in 'where clause'

誰でもこれを解決するのを手伝ってもらえますか?

4

3 に答える 3

5

WHERE句でエイリアスを参照することはできませんが、次のように参照できHAVINGます。

SELECT v.*,
     CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
     THEN 
          if( (@last_tm := timestamp ), @last_vid, @last_vid)
     ELSE 
          if( (@last_uid := visitorid) + (@last_vid := @last_vid+1) +(@last_tm := timestamp ),@last_vid, @last_vid )
     END  AS newVisitID

FROM visits v
HAVING newVisitID <- 5
ORDER BY timestamp DESC, visitorid
于 2013-10-11T22:22:01.370 に答える
1

変数を使用できると思います

SELECT v.*,
     @newVisitID := CASE WHEN @last_uid = visitorid AND cast( @last_tm as datetime) >= subtime( timestamp, '01:00' )
     THEN 
          if( (@last_tm := timestamp ), @last_vid, @last_vid)
     ELSE 
          if( (@last_uid := visitorid) + (@last_vid := @last_vid+1) +(@last_tm := timestamp ),@last_vid, @last_vid )
     END  AS newVisitID

FROM visits v
where @newVisitID <= 5
ORDER BY timestamp DESC, visitorid

コードを繰り返したくない場合は、サブクエリを使用してください。

于 2013-10-11T22:17:13.313 に答える