Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLITE Case Expression with variable to avoid double evaluation of expression

Hi I have a query where a expression is gonna be evaluated in most cases twice. I only want it evaluated once. I want to assign

CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT)

to a variable, so it doesn't get evaluated twice. How can I do this in one sql query?

SELECT CASE
           WHEN CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT) > 0 THEN CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT)
           ELSE 0
       END
FROM BUCKETS;
like image 201
ppone Avatar asked May 07 '26 20:05

ppone


1 Answers

You can evaluate expression in subquery and then use it's name (expr) in query:

SELECT CASE
           WHEN expr > 0 THEN expr
           ELSE 0
       END
FROM (
  SELECT
    -- add BUCKETS.*, here if you need other BUCKETS fields return to query
    CAST(ROUND(VOLUME - ((CAPACITY*1.0)/TIMEFRAME)*(STRFTIME('%s','now') - UPDATED_TIMESTAMP)) AS INT) AS expr 
  FROM BUCKETS
) b
like image 129
Rimas Avatar answered May 09 '26 13:05

Rimas



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!