【发布时间】:2018-01-31 09:38:33
【问题描述】:
我在下面的代码中定义了一个名为 a.onhold_endtime 的字段。我想将该值作为整个 SELECT 语句的一部分返回,但是当我包含它时,别名 a.* 无法识别。它返回错误“错误:缺少表“a”的 FROM 子句条目”
Select distinct
woas.workorderid,
a.onhold_endtime,
(SELECT
(SELECT count(*) AS work_hours
FROM generate_series (b.onhold_starttime
, a.onhold_endtime - interval '1h'
, interval '1h') h
WHERE EXTRACT(ISODOW FROM h) < 6
AND h::time >= '08:00'
AND h::time <= '18:00')
FROM (
SELECT DISTINCT woas.workorderid,
timestamp 'epoch' +
nth_value(wos.endtime,1) OVER(PARTITION BY woas.workorderid ORDER BY wos.endtime ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
/1000 * INTERVAL '1 second' as onhold_endtime from wo_status_info wos
LEFT JOIN wo_assessment woas ON woas.assessmentid = wos.assessmentid
WHERE tmp.workorderid = woas.workorderid AND wos.statusid = 1 AND wos.nextstatusid = 2
) as a
LEFT JOIN (
SELECT DISTINCT woas.workorderid,
timestamp 'epoch' +
nth_value(wos.endtime,1) OVER(PARTITION BY woas.workorderid ORDER BY wos.endtime ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
/1000 * INTERVAL '1 second' as onhold_starttime from wo_status_info wos
LEFT JOIN wo_assessment woas ON woas.assessmentid = wos.assessmentid
WHERE
(wos.statusid = 2 AND wos.nextstatusid <> 2)
) as b ON a.workorderid = b.workorderid) AS onhold_difference1
FROM wo_assessment as tmp
LEFT JOIN wo_assessment woas ON tmp.assessmentid = woas.assessmentid
LEFT JOIN wo_status_info wos ON woas.assessmentid = wos.assessmentid
ORDER BY woas.workorderid ASC
有没有一种方法可以构造代码,以便我可以使用“a”别名包含项目?
使用简化代码更新 我在一个别名为“a”的子查询中定义了一个名为“onhold_endtime”的值。我想在主 SELECT 语句中返回值 a.onhold_endtime
Select distinct
woas.workorderid,
a.onhold_endtime,
(SELECT
(SELECT count(*))
FROM (
SELECT DISTINCT woas.workorderid,
nth_value(wos.endtime,1) OVER(PARTITION BY woas.workorderid ORDER BY wos.endtime ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
as onhold_endtime from wo_status_info wos
WHERE y.workorderid = woas.workorderid AND wos.statusid = 1 AND wos.nextstatusid = 2
) as a
LEFT JOIN (
SELECT DISTINCT woas.workorderid,
nth_value(wos.endtime,1) OVER(PARTITION BY woas.workorderid ORDER BY wos.endtime ASC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
as onhold_starttime from wo_status_info wos
WHERE
(wos.statusid = 2 AND wos.nextstatusid <> 2)
) as b ON a.workorderid = b.workorderid) AS x
FROM wo_assessment as y
LEFT JOIN wo_assessment woas ON y.assessmentid = woas.assessmentid
【问题讨论】:
-
谢谢,但是我在语法上很吃力。如果您能提供我的代码示例,将不胜感激。
-
请将您的代码剪切成一些有问题的简短示例 - 我会帮助您
-
谢谢,我已经尽我所能简化了代码,同时仍然让它处于工作状态:)
标签: postgresql select subquery alias