我可以在另一个 WITH table AS 中使用 WITH table AS 吗?
Can I use a WITH table AS inside another WITH table AS?
基本上,我的 SQL 代码试图让在 5:15 下午后继续工作的人的百分比。这两个 table 代表一个在 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;
第二个table people_that_stayed_late
基本上是2017年7月3日5:15下午后没有离开大楼的人。每次我运行查询我收到错误:
ERROR: syntax error at or near "WITH"
LINE 7: WITH people_that_stayed_late AS (
我知道我在第二个 table 中使用第一个 table,但我不明白为什么会出现此错误。此外,我还没有计算百分比,因为我想看看我是否得到了正确的数字,知道谁在那个特定的日子上班,谁在 2017 年 7 月 3 日下午 5:15 后熬夜。
第二次省略WITH
关键字即可。
语法是
WITH [ RECURSIVE ] name1 AS (...),
name2 AS (...)
[ , ... ]
SELECT ...
基本上,我的 SQL 代码试图让在 5:15 下午后继续工作的人的百分比。这两个 table 代表一个在 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;
第二个table people_that_stayed_late
基本上是2017年7月3日5:15下午后没有离开大楼的人。每次我运行查询我收到错误:
ERROR: syntax error at or near "WITH"
LINE 7: WITH people_that_stayed_late AS (
我知道我在第二个 table 中使用第一个 table,但我不明白为什么会出现此错误。此外,我还没有计算百分比,因为我想看看我是否得到了正确的数字,知道谁在那个特定的日子上班,谁在 2017 年 7 月 3 日下午 5:15 后熬夜。
第二次省略WITH
关键字即可。
语法是
WITH [ RECURSIVE ] name1 AS (...),
name2 AS (...)
[ , ... ]
SELECT ...