An SQL When expression is a standard SQL Value Expression, and is coerced to a boolean type after evaluation. The WHEN
clause is used to select values based on their timestamp. Only values with timestamps (accesed via the special value_timestamp()
function) that cause the expression to evaluate true are kept; values resulting in evaluations of null or false are discarded.
Note that this syntax is not part of SQL, it is an MLDB extension, and is evaluated after the WHERE
clause.
The WHERE
clause is evaluated before the WHEN
clause. To illustrate that, consider the
browse events dataset containing these values
users / event | click | view |
---|---|---|
bob | link1 @ 2015-01-01T00:00:00 | google.com @ 2015-01-01T00:01:00 |
alice | link2 @ 2015-01-01T00:03:00 | mldb.ai @ 2015-01-01T00:06:00 |
One can select the events in the first five minutes of 2015 with this query
SELECT * FROM events
WHEN value_timestamp() BETWEEN '2015-01-01T00:00:00' AND '2015-01-01T00:05:00'
The output is
users / event | click | view |
---|---|---|
bob | link1 @ 2015-01-01T00:00:00 | google.com @ 2015-01-01T00:01:00 |
alice | link2 @ 2015-01-01T00:03:00 | null |
Similarly, one can select users who viewed mldb.ai with this query
SELECT * FROM events
WHERE view = 'mldb.ai'
users / event | click | view |
---|---|---|
alice | link2 @ 2015-01-01T00:03:00 | mldb.ai @ 2015-01-01T00:06:00 |
Lastly, if we combined the WHEN
and the WHERE
clauses together
SELECT * FROM events
WHEN value_timestamp() BETWEEN '2015-01-01T00:00:00' AND '2015-01-01T00:05:00'
WHERE view = 'mldb.ai'
we get:
users / event | click |
---|---|
alice | link2 @ 2015-01-01T00:03:00 |
This is because the WHERE
clause is evaluated prior to the WHEN
clause.