我一直在使用 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 中获得相同的记录集,因为它会获取任何员工和日期的第一个记录,然后尝试加入该记录。
有人有什么想法吗?
PostgreSQL 不喜欢在 CTE 中引用 ER 和 WS
您误解了CTE的工作原理,CTE中的查询必须独立可执行,它不能引用不包含在其范围内的表。因此,您需要首先将这些联接包含在 CTE 中。
SELECT hourlyBonus, shiftBonus
FROM empComp
WHERE selfmanagerid = 1
AND employeeNumber = ER.employeeNumber
AND effectiveDate >= WS.dateSoS
FETCH FIRST ROW ONLY
因此我们需要加入 ER 和 WS,以便您可以使用它,但我没有足够的信息来为您做出此决定。
主要查询甚至没有使用您的 CTE,使得意图非常模糊。也许您不需要让 ChatGPT 为您生成神奇的 SQL,而是需要创建一个包含您原始查询或提示的新帖子。 SO 不是代码编写服务,但您可以询问有关技术的具体问题或让我们帮助您调试您尝试过的查询