Помогите с запросом - TSQL - PullRequest
0 голосов
/ 08 июля 2011

Я действительно борюсь с проблемой ниже и нуждаюсь в некоторой помощи ... Я нашел несколько ответов, но не веду меня правильным путем ...

Table1

 sub-id  ref-id    Name
    1       1         Project 1
    2       1         Project 2  
    3       2         Project 3
    4       2         Project 4-

Table2

 sub-id  ref-id    log_stamp      Recepient      log_type
    ----------------------------------------------------
    1     1       06/06/2011     person A       1
    1     1       06/14/2011     person B       2
    1     1       06/16/2011     person C       2
    1     1       06/17/2011     person D       3
    2     1       06/18/2011     person E       2
    2     1       06/19/2011     person F       2

    3     2       06/20/2011     person G       1
    4     2       06/23/2011     person H       3

Результат

Name        ref-id    start_date    Recepient     latest_comment Recepient completion_date  Receipient
Project1    1         06/06/2011    person A      06/19/2011     person F      06/17/2011   person D
Project3    2         06/20/2011    person G      NULL           NULL          06/23/2011   person H

log_type из 1 обозначает начальную дату log_type из 2 обозначает последний_комментарий log_type из 3 стендов для завершения_даты нам нужно max_date в столбце даты будет отображается для каждого log_type. Имя проекта это просто название Топ-имя в той же группе ref-id уже пробовал это

1 Ответ

1 голос
/ 08 июля 2011

Для SQL Server 2005 +:

WITH cteMaxDates AS (
    SELECT sub_id, ref_id, log_type, MAX(log_stamp) AS MaxDate
        FROM Table2
        GROUP BY sub_id, ref_id, log_type
),
cteRecipient AS (
    SELECT md.sub_id, md.ref_id, md.log_type, md.MaxDate, t2.Recipient
        FROM cteMaxDates md
            INNER JOIN Table2 t2
                ON md.sub_id = t2.sub_id 
                    AND md.ref_id = t2.ref_id
                    AND md.log_type = t2.log_type
                    AND md.MaxDate = t2.log_stamp
)
SELECT t1.Name, t1.ref_id, 
       start.MaxDate AS start_date,
       start.Recipient AS start_recipient,
       comment.MaxDate AS latest_comment,
       comment.Recipient AS comment_recipient,
       complete.MaxDate AS completion_date,
       complete.Recipient AS completion_recipient
    FROM Table1 t1
        LEFT JOIN cteRecipient start
            ON t1.sub_id = start.sub_id
                AND t1.ref_id = start.ref_id
                AND start.log_type = 1
        LEFT JOIN cteRecipient comment
            ON t1.sub_id = comment.sub_id
                AND t1.ref_id = comment.ref_id
                AND comment.log_type = 2
        LEFT JOIN cteRecipient complete
            ON t1.sub_id = complete.sub_id
                AND t1.ref_id = complete.ref_id
                AND complete.log_type = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...