我一直在使用CHAT GTP来创建我需要的查询。我们一起得到了:
WITH employeeCompensation AS
(SELECT hourlyBonus, shiftBonus
FROM empComp
WHERE selfmanagerid = 1 AND
employeeNumber = ER.employeeNumber AND
effectiveDate >= WS.dateSoS
FETCH FIRST ROW ONLY)
SELECT ER.lastName, ER.firstName, ER.employeeNumber, hourlyBonus, shiftBonus
EC.hourlyBonus, EC.shiftBonus,
WS.dateSoS, EXTRACT (EPOCH FROM (WS.dateEoS + WS.timeEoS - WS.dateSoS - WS.timeSoS)) / 60 AS shiftDuration,
WS.wageType,
H.holidate
FROM workSchedules WS
INNER JOIN schedXEmp SXE ON SXE.schedId = WS.recId
INNER JOIN empRec ER ON ER.selfManagerId = 1 AND
ER.employeeNumber = SXE.employeeNumber
LEFT JOIN lkupHolidays H ON (H.holidate = WS.dateSoS AND
H.deactivatedTs > H.holidate)
WHERE WS.dateSoS BETWEEN '2020-4-15' AND '2020-10-15' AND
WS.deactivatedTs > CURRENT_TIMESTAMP AND
WS.selfmanagerid = 1
ORDER BY ER.lastName, ER.firstName, WS.wageType, WS.dateSoS, WS.timeSoS
;
字符串
当然,这不起作用,因为PostgreSQL不喜欢在CTE中引用ER和WS。它希望我将它们移动到靠近底部的INNER JOIN中。但是这样做不会在我的CTE中获得相同的记录,因为它会获得任何雇员和日期的第一条记录,然后尝试加入那一条记录。
有人有什么想法吗?
1条答案
按热度按时间rryofs0p1#
PostgreSQL不喜欢在CTE中引用ER和WS
你误解了CTE的工作原理,CTE中的查询必须是独立可执行的,它不能引用不包括在它的作用域中的表。所以你需要首先在CTE中包括这些联接。
字符串
所以我们需要加入ER和WS,这样你就可以使用它,但是没有足够的信息让我为你做出这个决定。
主查询甚至没有使用您的CTE,使意图非常模糊。也许不是要求ChatGPT为您生成神奇的SQL,您需要制作一个新的帖子,其中包含您原始的查询或提示。SO不是代码编写服务,但您可以询问有关技术的具体问题,或者让我们帮助您调试您尝试过的查询