所以我有2张桌子。 MobileRequest和MobileRequestAnswers。
表的格式如下:
表1 - 移动请求
ID Job_Number MobileRequestID CreatedOn
1 12 23 1-March-2017
2 12 25 1-Dec-2017
3 13 57 1-Jan-2016
表2 - 移动请求答案
ID ResourceID MobileRequestID QuestionID Answer
1 10 23 1 Space R
2 10 23 2 Boston
3 10 23 4 Good
4 10 25 2 New York
5 10 25 1 Space D
6 10 25 5 Jimmy
7 12 57 3 Bobby
我需要找到的是找到最新的MobileRequests(表1)作为工作号,在MobileRequestAnswers(表2)的记录集中没有问题ID 4,只要它是最新的移动请求,并在表中有其他记录,用于其他问题的移动请求ID。表之间的连接是MobileRequestID。
示例1 因此,例如对于作业编号12,我不会收到任何移动请求ID,因为移动请求ID 25在表2中返回的第一组记录中具有问题ID 4.
示例2 对于第13号工作,我应该获得移动申请ID 57。
尝试了一些自我连接的组合但是不能得到我期望的结果,所以任何引导都会受到赞赏。
答案 0 :(得分:1)
在不知道是否有job
表的情况下,我会从以下内容开始,只在mobile_request_answers
中获取与其无关的问题4的作业。
WITH
jobs_checked_question_4 AS
(
SELECT
mr.*,
MAX(
CASE WHEN mra.QuestionID = 4 THEN 1 ELSE 0 END
)
OVER (PARTITION BY mr.job_number) AS HasQuestionID4,
RANK() OVER (PARTITION BY mr.job_number
ORDER BY mr.CreatedOn ) AS RequestRank
FROM
mobile_request AS mr
LEFT JOIN
mobile_request_answer AS mra
ON mra.MobileRequestID = mr.MobileRequestID
)
SELECT
*
FROM
jobs_checked_question_4
WHERE
HasQuestionID4 = 0 -- The job never associates to a QuestionID 4
AND RequestRank = 1 -- The most recent Request for each Job
如果answer
没有与request
相关联的job
记录,则会为每个job
返回最新request
的所有answer
条记录QuestionID = 4
与babel-node
如果在同一天创建了这些请求,则可以返回同一作业的多个请求。