SQLクエリで繰り返しの式を考慮に入れるにはどうすればよいですか?列エイリアスはチケットではないようです

StackOverflow https://stackoverflow.com/questions/2909758

質問

だから、私はこのようなものに見えるクエリを持っています:

SELECT id, 
    DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%b %d %Y') as callDate, 
    DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%H:%i') as callTimeOfDay, 
    SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE 
    customerCode='999999-abc-blahblahblah' AND 
    CONVERT_TZ(callTime,'+0:00','-7:00') >= '2010-04-25' AND
    CONVERT_TZ(callTime,'+0:00','-7:00') <= '2010-05-25'

あなたが私のようであれば、おそらく私がそれを計算するように頼まなかったなら、それは読みやすさとおそらくこのクエリのパフォーマンスを改善するだろうと考え始めるでしょう CONVERT_TZ(callTime,'+0:00','-7:00') 4回別々。

そこで、私はその表現の列エイリアスを作成し、そのエイリアスにさらに発生することを置き換えようとします。

SELECT id, 
    CONVERT_TZ(callTime,'+0:00','-7:00') as callTimeZoned,
    DATE_FORMAT(callTimeZoned,'%b %d %Y') as callDate, 
    DATE_FORMAT(callTimeZoned,'%H:%i') as callTimeOfDay, 
    SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE 
    customerCode='5999999-abc-blahblahblah' AND 
    callTimeZoned >= '2010-04-25' AND
    callTimeZoned <= '2010-05-25'

これは、MySQLマニュアルを引用することを学んだときです。

標準のSQLは、Where句の列エイリアスへの参照を許可します。この制限は、句が評価された場合、列値がまだ決定されていない可能性があるため、課されます。

したがって、そのアプローチは水中で死んでいるように思われます。

誰かがこのような繰り返しの表現でクエリを書いているのはどうですか?

役に立ちましたか?

解決

派生テーブルでエイリアスを定義してから、外部クエリでそれらを参照できます。

SELECT callTimeZoned, callLength,
    DATE_FORMAT(callTimeZoned,'%b %d %Y') as callDate, 
    DATE_FORMAT(callTimeZoned,'%H:%i') as callTimeOfDay 
FROM (
    SELECT
        CONVERT_TZ(callTime,'+0:00','-7:00') as callTimeZoned,
        SEC_TO_TIME(callLength) as callLength
    FROM cs_calldata
    WHERE customerCode='5999999-abc-blahblahblah'
) AS d
WHERE 
    callTimeZoned BETWEEN '2010-04-25' AND '2010-05-25'

他のヒント

SELECT id, 
    CONVERT_TZ(callTime,'+0:00','-7:00') as callTimeZoned,
    DATE_FORMAT(callTimeZoned,'%b %d %Y') as callDate, 
    DATE_FORMAT(callTimeZoned,'%H:%i') as callTimeOfDay, 
    SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE 
    customerCode='5999999-abc-blahblahblah' having
    callTimeZoned >= '2010-04-25' AND
    callTimeZoned <= '2010-05-25'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top