【发布时间】:2015-03-17 08:43:30
【问题描述】:
我在 SQLWorkbenchJ 中使用 PostgreSQL,但我很苦恼。
我有一个WITH 语句,它根据行号选择日期。如果语句找不到行号,我想在日期字段中选择 null。这目前不会发生,它只是选择所有字段都不为空的记录。我假设它与连接有关,但我不确定。
当前声明如下。它应该返回大约 50,000 条记录,但目前返回的记录不到 2000 条。
WITH FifthEnquiry AS
(
SELECT emailaddress,
SentDate,
ROW_NUMBER() OVER (PARTITION BY emailaddress ORDER BY COUNT(*) DESC) AS rk
FROM SentEmails
GROUP BY emailaddress,
SentDate
),
TenthEnquiry AS
(
SELECT emailaddress,
SentDate,
ROW_NUMBER() OVER (PARTITION BY emailaddress ORDER BY COUNT(*) DESC) AS rk
FROM SentEmails
GROUP BY emailaddress,
SentDate
),
TwentiethEnquiry AS
(
SELECT emailaddress,
SentDate,
ROW_NUMBER() OVER (PARTITION BY emailaddress ORDER BY COUNT(*) DESC) AS rk
FROM SentEmails
GROUP BY emailaddress,
SentDate
)
SELECT FifthEnquiry.emailaddress,
FifthEnquiry.SentDate AS Fith,
TenthEnquiry.SentDate AS Tenth,
TwentiethEnquiry.SentDate AS Twentieth,
FROM FifthEnquiry
JOIN TenthEnquiry ON FifthEnquiry.emailaddress = TenthEnquiry.emailaddress
JOIN TwentiethEnquiry ON FifthEnquiry.emailaddress = TwentiethEnquiry.emailaddress
WHERE (FifthEnquiry.rk = 5)
AND (TenthEnquiry.rk = 10)
AND (TwentiethEnquiry.rk = 20)
【问题讨论】:
-
根据需要使用左连接或右连接。
-
两者都给出相同数量的记录@FrankHeikens
标签: sql postgresql select null common-table-expression