2011-06-16 3 views
0

Таким образом, у меня есть следующий запросУдаление дублей из запроса

SELECT r.userId, r.programmeId, u.email, u.firstName, u.lastName, u.profileId, tblProgrammes.name, u.storeId, r.dateEnded AS lastPass, r.dateExpired 
FROM tblUserRepeatHistory AS r INNER JOIN 
tblUsers AS u ON r.userId = u.id INNER JOIN 
tblProgrammes ON r.programmeId = tblProgrammes.id 
WHERE (r.dateExpired IS NOT NULL) AND (u.storeId = @storeId) 
GROUP BY r.userId, r.programmeId, u.email, u.firstName, u.lastName, u.profileId, tblProgrammes.name, u.storeId, r.dateEnded, r.dateExpired, r.id 
HAVING (DATEDIFF(D, MAX(r.dateExpired), GETDATE() + 31) >= 0) 

который возвращает следующие данные

11 22 [email protected] store-mgr jamie2 1 Deli Food Service 1 5 04/02/2011 09:36:11 10/05/2011 09:36:11 

11 22 [email protected] store-mgr jamie2 1 Deli Food Service 1 5 04/02/2011 09:36:11 10/05/2011 09:36:11 

11 22 [email protected] store-mgr jamie2 1 Deli Food Service 1 5 11/05/2011 09:44:36 10/07/2011 09:44:36 

11 23 [email protected] store-mgr jamie2 1 Deli Food Service 2 5 11/05/2011 10:12:50 16/06/2011 10:12:50 

я в основном только одна запись, возвращаемые для каждого пользователя и программы, где совсем недавно добавленным нужно вернуться, так что я думаю, MAX (dateExpired). Таким образом, этот запрос т.е. должен возвращать только две записи

11 22 [email protected] store-mgr jamie2 1 Deli Food Service 1 5 11/05/2011 09:44:36 10/07/2011 09:44:36 
11 23 [email protected] store-mgr jamie2 1 Deli Food Service 2 5 11/05/2011 10:12:50 16/06/2011 10:12:50 

ответ

0

SELECT DISTINCT являются SQL ключевые слова вам нужно. DISTINCT заставляет запрос возвращать только те столбцы, которые отличаются друг от друга.

+0

Не думайте, что это будет сделано, потому что некоторые записи отличаются друг от друга, но я по-прежнему только одна запись, возвращенная для каждого идентификатора пользователя и идентификатора программы – StevieB

0

Удалить r.dateExpired из предложения GROUP BY и заменить его «MAX (r.dateExpired) как dateExpired» в списке выбора.

+0

Пробовал, что, все еще получая более 1 записи для каждый пользователь и программа – StevieB

+0

Возможно, вам нужно сделать те же изменения с полем r.dateEnded. На самом деле это довольно легко заметить - посмотрите результаты, поля которых различны и не группируются по этим полям. – Arvo

+0

Если я правильно понял Q, только r.userId и r.programmeId должны быть в предложении GROUP BY – Cez

0

вы можете использовать кросс применять

SELECT * FROM tblUsers as u CROSS JOIN tblProgrammes p 
CROSS APPLY 
(SELECT TOP 1 dateExpired FROM tblUserRepeatHistory 
WHERE userId = u.id and programmeId = p.id 
ORDER BY dateExpired desc 
) as rr 

в сотрудничестве, связанные с подзапросом вы получаете максимальную dateExpired в tblUserRepeatHistory, где встретиться с программой и пользователем, креста применить нечто подобное внутреннему соединение, для вложенных запросов и табличные функции

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