从表2中获取最新记录

时间:2017-12-13 22:04:07

标签: sql sql-server

所以我有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。

尝试了一些自我连接的组合但是不能得到我期望的结果,所以任何引导都会受到赞赏。

1 个答案:

答案 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 = 4babel-node

。{

如果在同一天创建了这些请求,则可以返回同一作业的多个请求。