【问题标题】:Can I use a WITH table AS inside another WITH table AS? [duplicate]我可以在另一个 WITH 表 AS 中使用 WITH 表 AS 吗? [复制]
【发布时间】:2019-03-04 04:56:50
【问题描述】:

基本上,我的 SQL 代码试图获取下午 5:15 之后留下来工作的人的百分比。这两张桌子代表一张在下午 5 点 15 分之后留下来的表格,一张在 5 点 15 分之前离开的一张桌子。以下是我的查询:

WITH people_that_left_early AS ( 
SELECT username, MAX(created_at) AS timestamp
FROM doorlogs
WHERE created_at <= '2017-07-03 05:15:00 PM'
AND created_at >= '2017-07-03 06:00:00 AM'
GROUP BY username),

WITH people_that_stayed_late AS (
SELECT a.username, a.event, b.timestamp
FROM doorlogs a 
INNER JOIN people_that_left_early b
ON a.username = b.username
WHERE a.created_at = b.timestamp
AND event <> 'X')

SELECT COUNT(a.username), COUNT(b.username) 
FROM people_that_left_early a 
LEFT JOIN people_that_stayed_late b
ON a.username = b.username;

第二张桌子people_that_stayed_late 基本上是 2017 年 7 月 3 日下午 5:15 之后没有离开大楼的人。每次运行查询时都会出现错误:

ERROR:  syntax error at or near "WITH"
LINE 7: WITH people_that_stayed_late AS (

我知道我在第二个表中使用了第一个表,但我不明白为什么它会给我这个错误。此外,我还没有计算得到百分比,因为我想看看我是否得到了正确的数字,哪些人在 2017 年 7 月 3 日下午 5 点 15 分之后上班和迟到。

【问题讨论】:

    标签: sql postgresql common-table-expression


    【解决方案1】:

    第二次省略 WITH 关键字即可。

    语法是

    WITH [ RECURSIVE ] name1 AS (...),
                       name2 AS (...)
                       [ , ... ]
    SELECT ...
    

    【讨论】:

    • 哦,哇,我什至不知道。即使在制作差异表并尝试将它们与最后的选择语句进行比较后,我也总是使用 WITH。
    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2022-12-02
    • 2011-07-19
    相关资源
    最近更新 更多