2014-12-14 2 views
2

Этот результирующий набор получен из уже сложного фрагмента sql, но im stuck пытается фильтровать данные вниз.SQL Группировка данных и актуальность установки

-Детали с активным = 1 и утвержден = 0 означает, что они живые

-Детали с активным = 0 и утвержден = 0 означает, что они находятся на рассмотрении однако, один с самым последним updateddate является последней версией.

Поскольку не все поля против того же VERSIONID уникальны, я не в состоянии выбрать MAX (updateDate), [все остальные поля] группы по [всех других областях]

Im с помощью SQL Server 2012 - См. Ниже таблицу sql insert mock

Я попробовал это с футляром, но у меня все еще есть такая же проблема, как версияId не уникальна. В обеих попытках я получаю один и тот же рекорд.

CASE 
WHEN CONVERT(varchar(1), CAST(c.active AS varchar)) + CONVERT(varchar(1), CAST(c.approved AS varchar)) = ''10'' THEN 1 
WHEN CONVERT(varchar(1), CAST(c.active AS varchar)) + CONVERT(varchar(1), CAST(c.approved AS varchar)) = ''00'' AND MAX(c.lastUpdate) = c.lastUpdate THEN 2 
ELSE 0 
END AS 

Содержимое, показывающее все предметы, в прямом эфире и в ожидании.

Title    |updatedDate    | versionId   | approved | pending | ParentCategoryId | ChildCategoryId 
================================================================================================================================= 
    Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 1     | 1 
    Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 2     | 2 
    Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 2     | 3 
    Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 1     | 1 
    Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 2     | 2 
    Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 2     | 3 
    Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 1     | 1 
    Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 2     | 2 
    Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 2     | 3 
    Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 1     | 1 
    Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 2     | 2 
    Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 2     | 3 
    Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 1     | 1 
    Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 5 
    Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 12 
    Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 11 
    Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 1 

Что я хочу, чтобы иметь возможность вернуть то, что будет определить, какой активный набор записей (т.е. уместность = 1) и которые являются наиболее недавно обновлены и до (то есть уместность = 2) и которые игнорировать (т.е. релевантность = 0). Любая помощь очень ценится

relevance | Title    |updatedDate    | versionId   | approved | pending | ParentCategoryId | ChildCategoryId 
============================================================================================================================================= 
2   | Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 1     | 1 
2   | Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 2     | 2 
2   | Maths test  |2014-12-13 12:11:14.100 | A744066251C0F108 | 0   | 1   | 2     | 3 
0   | Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 1     | 1 
0   | Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 2     | 2 
0   | Maths test  |2014-12-13 12:10:48.777 | BCD74AAD664F2FAC | 0   | 1   | 2     | 3 
0   | Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 1     | 1 
0   | Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 2     | 2 
0   | Maths test  |2014-12-13 12:09:09.033 | A6D650EB233DBE0F | 0   | 1   | 2     | 3 
1   | Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 1     | 1 
1   | Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 2     | 2 
1   | Maths test  |2014-12-13 12:07:44.780 | GV54M6764ASD3HK9 | 1   | 0   | 2     | 3 
1   | Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 1     | 1 
1   | Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 5 
1   | Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 12 
1   | Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 11 
1   | Science test  |2014-07-04 15:53:02.000 | ARE8327FURP24KS4 | 1   | 0   | 2     | 1 

Поскольку SQLFiddler не работает Я добавил SQL вставки здесь CREATE TABLE #content ( ID INT IDENTITY (1,1) NOT NULL, название VARCHAR (20) , lastUpdate DateTime, VERSIONID VARCHAR (30), активные TINYINT, одобрено TINYINT, parentCategoryId INT, childCategoryId INT );

INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:11:14' , 'A744066251C0F108' , 0 , 0 , 1  , 1 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:11:14' , 'A744066251C0F108' , 0 , 0 , 2  , 2 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:11:14' , 'A744066251C0F108' , 0 , 0 , 2  , 3 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:10:48' , 'BCD74AAD664F2FAC' , 0 , 0 , 1  , 1 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:10:48' , 'BCD74AAD664F2FAC' , 0 , 0 , 2  , 2 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:10:48' , 'BCD74AAD664F2FAC' , 0 , 0 , 2  , 3 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:09:09' , 'A6D650EB233DBE0F' , 0 , 0 , 1  , 1 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:09:09' , 'A6D650EB233DBE0F' , 0 , 0 , 2  , 2 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:09:09' , 'A6D650EB233DBE0F' , 0 , 0 , 2  , 3 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:07:44' , 'GV54M6764ASD3HK9' , 1 , 0 , 1  , 1 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:07:44' , 'GV54M6764ASD3HK9' , 1 , 0 , 2  , 2 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Maths test' ,'2014-12-13 12:07:44' , 'GV54M6764ASD3HK9' , 1 , 0 , 2  , 3 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Science test' ,'2014-07-04 15:53:02' , 'ARE8327FURP24KS4' , 1 , 0 , 1  , 1 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Science test' ,'2014-07-04 15:53:02' , 'ARE8327FURP24KS4' , 1 , 0 , 2  , 5 ); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Science test' ,'2014-07-04 15:53:02' , 'ARE8327FURP24KS4' , 1 , 0 , 2  , 12); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Science test' ,'2014-07-04 15:53:02' , 'ARE8327FURP24KS4' , 1 , 0 , 2  , 11); 


INSERT INTO #content 
(title, lastUpdate, versionId, active, approved, parentCategoryId, childCategoryId) 
VALUES ('Science test' ,'2014-07-04 15:53:02' , 'ARE8327FURP24KS4' , 1 , 0 , 2  , 1 ); 

select * from #content 
+0

Что вы хотите сделать? - Потому что не все поля, относящиеся к одному и тому же versionId, уникальны, я не могу выбрать MAX (updateDate), [все остальные поля] группой [все остальные поля] –

+0

btw, ваш sql имеет ошибку - Msg 102, Level 15, Состояние 1, Строка 3 Неверный синтаксис рядом с 'auto_increment'. Он должен быть - id int IDENTITY (1,1) ПЕРВИЧНЫЙ КЛЮЧ –

+0

re. столбец идентичности, спасибо за указание на это, это не так, как sqlFiddle все еще не работает. –

ответ

0

заявление случая использования с подзапросом, как так:

select case when rc.active = 1 and rc.approved = 0 
     then 1 
     when rc.lastUpdate = (select max(lastUpdate) from content where rc.title = title group by title, lastUpdate) 
       and rc.active = 0 and rc.approved = 0 
     then 2 
     else 0 
    end as Relevance, 
    rc.* 
from content rc 

Но, пожалуйста, проверьте свой комментарий выше по вопросу о входных данных и ранг 2.

+0

Пока не уверен, как использование подзапроса будет влиять на производительность общего запроса, но ваш ответ дал мне то, что мне нужно. Я немного изменил запрос, в некоторых случаях, когда lastUpdated в группе подзапросом возвратил более одной записи, поэтому я ее вынул. благодаря –

Смежные вопросы