Mysql 基于自定义计算字段筛选行
我想使用WHERE条件筛选返回的行。问题是MySQL不允许我在WHERE子句中使用自定义列名。它给出了一个语法错误Mysql 基于自定义计算字段筛选行,mysql,sql,Mysql,Sql,我想使用WHERE条件筛选返回的行。问题是MySQL不允许我在WHERE子句中使用自定义列名。它给出了一个语法错误 SELECT jobs.*, CASE WHEN job_status = 'submitted' THEN ((2 * 86400) - ($mktime - job_timestamp))/86400 WHEN job_status = 'agreement_pending' THEN (
SELECT jobs.*,
CASE
WHEN job_status = 'submitted' THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
WHEN job_status = 'agreement_pending' THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
WHEN job_status = 'payment_complete' THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
ELSE 1000000
END AS sla
FROM jobs
WHERE sla < 0
在sla<0条件下是否仍可以过滤出行?MySQL有一个特殊的扩展,您可以使用having子句执行此操作:
这在其他数据库中不受支持。适用于所有RDBMS的有效解决方案使用派生表:
SELECT *
FROM
(
SELECT jobs.*,
CASE
WHEN job_status = 'submitted' THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
WHEN job_status = 'agreement_pending' THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
WHEN job_status = 'payment_complete' THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
ELSE 1000000
END AS sla
FROM jobs
) AS dt
WHERE sla < 0
SELECT *
FROM
(
SELECT jobs.*,
CASE
WHEN job_status = 'submitted' THEN ((2 * 86400) - ($mktime - job_timestamp))/86400
WHEN job_status = 'agreement_pending' THEN ((1 * 86400) - ($mktime - job_tstamp_agpending))/86400
WHEN job_status = 'payment_complete' THEN ((job_duration * 86400) - ($mktime - job_tstamp_pcomplete))/86400
ELSE 1000000
END AS sla
FROM jobs
) AS dt
WHERE sla < 0