2014-02-09 6 views
0

У меня есть структура ниже таблицы, которая успешно получает максимальное значение столбца таблицы для каждого CommentID. Но я хочу ПРИСОЕДИНИТЬСЯ к таблице tbComment с tbCommentBreadcrumb, где CommentID является ключом.Таблица JOIN при выборе максимального значения столбцов

tbComment

CommentID  IsLocked 
1    0  
2    0 
3    1 
4    0 
5    1 

tbCommentBreadcrumb

CommentStatusID CommentID StatusTypeID 
105    1   1     
106    1   4     
107    2   1     
108    3   1    
109    3   4 
110    4   1 
112    5   1 
112    5   4 

Вот что я работаю:

SELECT * 
FROM 
(
    SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY CommentID ORDER BY CreateDateTime desc) as rn 
    FROM 
    tbCommentBreadCrumb 
    WHERE 
    CommentStatusTypeID = 4 
    AND CreateDateTime <= {ts '2014-02-09 09:44:57'} 
) t 
WHERE 
    t.rn = 1 
ORDER BY 
    CommentStatusID DESC 

Это возвращает более ста записей, и я хочу furthe r уточните запрос, только получив записи, где приведенный выше запрос истинен, а также что каждый из CommentID в таблице tbComment заблокирован. В принципе, не уверен, где РЕГИСТРИРУЙТЕСЬ tbComment и поставить AND tbComment.CommentIsLocked = 1

ответ

2

Вы довольно близко :-)

SELECT t.* 
FROM 
(
    SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY CommentID ORDER BY CreateDateTime desc) as rn 
    FROM 
    tbCommentBreadCrumb 
    WHERE CommentStatusTypeID = 4 
      AND CreateDateTime <= {ts '2014-02-09 09:44:57'} 
) t 
JOIN tbComment c ON t.CommentID = c.CommentID 
WHERE 
    t.rn = 1 
AND c.CommentIsLocked = 1 
ORDER BY CommentStatusID DESC 
+0

Благодаря отлично работает! – user1431633

1
;With CTE 
AS 
(
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY CommentID ORDER BY CreateDateTime desc) as rn 
    FROM tbCommentBreadCrumb 
    WHERE CommentStatusTypeID = 4 
    AND CreateDateTime <= {ts '2014-02-09 09:44:57'} 
) 
SELECT * 
FROM CTE C INNER JOIN tbComment TC 
ON C.CommentID = TC.CommentID 
WHERE C.rn = 1 
ORDER BY C.CommentStatusID DESC 
Смежные вопросы