sql - 在查询结果中包含子查询 WHERE 语句的值
问题描述
从我有限的经验来看,这似乎是一个相当复杂的 SQL 查询。
如何添加或编辑此查询,使其包含通过ees.cardate
或子查询中检查的日期s3ees.cardate
?
这是我可能能够从中获取cardate
值的子查询之一:
(EXISTS ( SELECT
s3esc.carstage_model_id
FROM
carstage_model s3esc
JOIN car_carstage s3ees USING (car_carstage_id)
WHERE
s3esc.car_model_id = ec1.car_model_id
AND (s3esc.carmodelstatus_id = ANY (ARRAY[6, 8, 9, 11, 12]))
AND s3ees.cardate >= '2020-07-23 02:55:50.552513'
)
)
这是完整的查询:
WITH running_carmodel(car_model_id, rm_factory_id, factory_id, parent_id, model_id, rm_model_id, firstname, nickname, middlename, lastname, suffix, modelpreferredname_id, title, rank) AS (
SELECT ec.car_model_id, ecp.factory_id, ec.factory_id AS rm_factory_id, ec.parent_id, ec.model_id, ecp.model_id AS rm_model_id, c.firstname, c.nickname, c.middlename, c.lastname, c.suffix, c.modelpreferredname_id, o.title, o.rank
FROM car_model ec
JOIN car e USING (car_id), model c, factory o, car_model ecp
WHERE e.caryear::double precision >= date_part('year'::text, now())
AND ecp.model_id = c.model_id
AND ecp.factory_id = o.factory_id
AND ecp.car_model_id = ec.parent_id
)
SELECT DISTINCT
1 AS q,
ot.rank AS ot_rank,
o.rank AS o_rank,
CASE
WHEN c.model_id IS NOT NULL THEN odn.rank
ELSE dn.rank
END AS dn_rank,
o.factory_id,
oc.state_id,
c.model_id,
CASE
WHEN c.model_id IS NOT NULL THEN odn.districtname_id
ELSE dn.districtname_id
END AS districtname_id,
CASE
WHEN true = false THEN true
ELSE NULL
END AS redis_new,
c.firstname,
c.nickname,
c.middlename,
c.lastname,
c.suffix,
c.modelpreferredname_id,
oc.factory_model_id,
o.name AS factory,
o.title,
ot.rank,
CASE
WHEN c.model_id IS NOT NULL AND oc.districtname_id IS NULL THEN ''::character varying
WHEN dn.name::text ~ '^[0-9]+$'::text THEN ('District '::text || dn.name::text)::character varying
ELSE dn.name
END AS district,
ot.name AS factorytype,
ot.factorytype_id,
c.photourl,
pvs_factory_party(oc.factory_model_id) AS factory_party,
(SELECT
ecs.name
FROM
carmodelstatus ecs
JOIN carstage_model esc USING (carmodelstatus_id)
JOIN car_carstage ees USING (car_carstage_id)
JOIN carstage es USING (carstage_id)
JOIN car_model ec USING (car_model_id)
JOIN car e ON e.car_id = ees.car_id AND e.caryear::double precision = date_part('year'::text, now())
WHERE
esc.car_model_id = ec.car_model_id
AND ec.model_id = c.model_id
AND ec.factory_id = o.factory_id
AND (ec.districtname_id = odn.districtname_id OR ec.districtname_id IS NULL OR odn.districtname_id IS NULL)
AND CASE WHEN ec.factory_id = 1 THEN ees.state_id = 'NA' ELSE TRUE END
AND ees.modelrelease_id >= 2
ORDER BY es.rank DESC
LIMIT 1) AS car_status,
CASE
WHEN c.model_id IS NOT NULL THEN true
ELSE false
END AS incumbent,
ec1.districtname_id AS car_districtname_id,
rm.rm_model_id AS rm_model_id,
rm.firstname AS rm_firstname,
rm.middlename AS rm_middlename,
rm.nickname AS rm_nickname,
rm.lastname AS rm_lastname,
rm.suffix AS rm_suffix,
rm.title AS rm_title,
pvs_car_party(rm.parent_id) AS rm_party,
rm.modelpreferredname_id AS rm_modelpreferredname_id,
ob.name AS factorybranch,
l.name AS local
FROM
factory_state os
JOIN factory o USING (factory_id)
JOIN factorytype ot USING (factorytype_id)
LEFT JOIN factorybranch ob USING (factorybranch_id)
LEFT JOIN district d USING (factory_id, state_id)
LEFT JOIN districtname dn USING (districtname_id)
LEFT JOIN factory_model oc ON oc.factory_id = o.factory_id AND (oc.state_id = os.state_id OR oc.state_id = 'NA'::bpchar) AND (oc.districtname_id = d.districtname_id OR oc.districtname_id IS NULL ) AND (oc.factorymodelstatus_id = ANY (ARRAY[1, 3, 4]))
LEFT JOIN model c USING (model_id)
LEFT JOIN districtname odn ON odn.districtname_id = oc.districtname_id
LEFT JOIN car_model ec1 ON ec1.model_id = c.model_id AND (EXISTS ( SELECT
s3esc.carstage_model_id
FROM
carstage_model s3esc
JOIN car_carstage s3ees USING (car_carstage_id)
WHERE
s3esc.car_model_id = ec1.car_model_id
AND (s3esc.carmodelstatus_id = ANY (ARRAY[6, 8, 9, 11, 12]))
AND s3ees.cardate >= '2020-07-23 02:55:50.552513'
)
)
LEFT JOIN running_carmodel rm ON rm.car_model_id = ec1.car_model_id AND rm.factory_id = o.factory_id
LEFT JOIN local l USING (local_id)
WHERE (
(
oc.factorymodelstatus_id = ANY (ARRAY[1, 4])
OR oc.factory_model_id IS NULL
)
AND (os.state_id = ANY (ARRAY['ME'::bpchar, 'NA'::bpchar]))
AND
CASE
WHEN o.factory_id = ANY (ARRAY[1, 3, 4, 6]) THEN true
WHEN ot.factorytype_id = 'P'::bpchar THEN true
WHEN o.factory_id = 5 THEN (dn.districtname_id IN (1) OR dn.districtname_id IN (978, 910, 917, 370))
WHEN o.factory_id = 6 THEN dn.districtname_id IN (613, 914, 915, 2019, 2020)
WHEN o.factory_id IN (7,8) THEN dn.districtname_id IN (36,37,40,41,42,43)
WHEN o.factory_id = 9 THEN dn.districtname_id IN (25,27,28)
WHEN ot.factorylevel_id = 'S'::bpchar THEN true
WHEN ot.factorylevel_id = 'L'::bpchar AND oc.local_id IN (619,2438) THEN true
ELSE false
END
)
UNION
SELECT DISTINCT
2 AS q,
ot.rank AS ot_rank,
o.rank AS o_rank,
dn.rank AS dn_rank,
o.factory_id,
ec.state_id,
c.model_id,
CASE
WHEN o.factory_id = 6 THEN ( SELECT
s2ec.districtname_id
FROM
car_model s2ec
JOIN carstage_model s2esc USING (car_model_id)
WHERE
(s2esc.carmodelstatus_id = ANY (ARRAY[6, 7, 8, 9, 10, 11, 12, 13]))
AND s2ec.factory_id = 6
AND s2ec.state_id = ec.state_id
LIMIT 1)
ELSE dn.districtname_id
END AS districtname_id,
false AS redis_new,
c.firstname,
c.nickname,
c.middlename,
c.lastname,
c.suffix,
c.modelpreferredname_id,
ec.car_model_id AS factory_model_id,
o.name AS factory,
o.title,
ot.rank,
CASE
WHEN dn.name::text ~ '^[0-9]+$'::text THEN ('District '::text || dn.name::text)::character varying
ELSE dn.name
END AS district,
ot.name AS factorytype,
ot.factorytype_id,
c.photourl,
pvs_car_party(ec.car_model_id) AS factory_party,
(SELECT ssecs.name
FROM carmodelstatus ssecs
JOIN carstage_model ssesc USING (carmodelstatus_id)
JOIN car_carstage ssees USING (car_carstage_id)
JOIN carstage sses USING (carstage_id)
WHERE
ssesc.car_model_id = ec.car_model_id
AND CASE
WHEN o.factory_id = 1 THEN sses.carstage_id = 'G'::bpchar AND ssees.state_id = 'NA'
ELSE true
END
AND ssees.modelrelease_id >= 2
ORDER BY sses.rank DESC
LIMIT 1) AS car_status,
(SELECT true AS bool
FROM factory_model s3oc
JOIN factory s3o USING (factory_id)
WHERE
s3oc.factory_id = ec.factory_id
AND (
s3oc.districtname_id = ec.districtname_id
OR s3oc.districtname_id IS NULL
OR ec.factory_id = 6
OR s3o.factorytype_id = 'K'::bpchar
AND ec.state_id = 'ME'::bpchar
)
AND s3oc.state_id = ec.state_id
AND s3oc.model_id = c.model_id
AND s3oc.factorymodelstatus_id IN (1,4)
LIMIT 1) AS incumbent,
(-1) AS car_districtname_id,
rm.rm_model_id AS rm_model_id,
rm.firstname AS rm_firstname,
rm.middlename AS rm_middlename,
rm.nickname AS rm_nickname,
rm.lastname AS rm_lastname,
rm.suffix AS rm_suffix,
rm.title AS rm_title,
pvs_car_party(rm.parent_id) AS rm_party,
rm.modelpreferredname_id AS rm_modelpreferredname_id,
ob.name AS factorybranch,
NULL AS local
FROM
model c
JOIN car_model ec USING (model_id)
JOIN car e ON e.car_id = ec.car_id
JOIN factory o USING (factory_id)
JOIN factorytype ot ON ot.factorytype_id = o.factorytype_id
JOIN car_carstage ees ON ees.car_id = e.car_id AND ees.state_id = ec.state_id
JOIN carstage_model esc USING (car_model_id, car_carstage_id)
LEFT JOIN factorybranch ob USING (factorybranch_id)
LEFT JOIN running_carmodel rm ON rm.car_model_id = ec.car_model_id
LEFT JOIN districtname dn USING (districtname_id)
WHERE
(ec.state_id = ANY (ARRAY['ME'::bpchar, 'NA'::bpchar]))
AND ees.cardate >= '2020-07-23 02:55:50.552513'
AND CASE
WHEN o.factory_id = 1 THEN ec.major
WHEN o.factory_id = 2 THEN (EXISTS ( SELECT s6ec.car_model_id
FROM car_model s6ec
JOIN carstage_model s6esc USING (car_model_id)
WHERE (
s6esc.carmodelstatus_id = ANY (ARRAY[6, 8, 9, 11, 12]))
AND s6ec.model_id = ec.parent_id
AND s6ec.major = true
)
)
WHEN o.factory_id = ANY (ARRAY[3, 4, 6]) THEN true
WHEN ot.factorytype_id = 'P'::bpchar THEN true
WHEN o.factory_id = 5 THEN (dn.districtname_id IN (1) OR dn.districtname_id IN (978, 910, 917, 370))
WHEN o.factory_id = 6 THEN dn.districtname_id IN (613, 914, 915, 2019, 2020)
WHEN o.factory_id IN (7,8) THEN dn.districtname_id IN (36,37,40,41,42,43)
WHEN o.factory_id = 9 THEN dn.districtname_id IN (25,27,28)
WHEN ot.factorylevel_id = 'S'::bpchar THEN true
ELSE false
END
AND ees.modelrelease_id >= 1
AND e.caryear >= 2020
ORDER BY 1, 2, 3, 4, 18, 13
解决方案
推荐阅读
- node.js - 如何使用节点js中的关键字从文本文件中获取特定行
- angular - 如何在角度中使用 ContentChildren 访问嵌套元素
- angular - 在 Typescript 函数返回 true 后添加 CSS-Class
- c# - 使用 JsonTextReader 或任何其他替代方法从 json 中读取特定对象作为流
- javascript - 使用 JQuery 在 IE (Internet Explorer) 中将“另存为”类型更改为 .xls 对话框
- fiddler - Fiddler 将请求发送到远程服务器到 localhost
- java - PDF“Itext 用户代理”缓存大小以及如何清除它
- javascript - 从对象数组中删除重复键
- python - Odoo幽灵记录
- php - 在 PHP 中将多行/自动换行添加到图像字符串