Sql server : выберите участников, имеющих 2 или более записей на разные даты одного и того же класса

#sql #sql-server

Вопрос:

Я пытаюсь выяснить все идентификаторы участников, у которых более 2 записей на разные даты в одном классе.

  ---------- ------------ ------- ----------- 
| MemberId |    Date    | Class |           |
 ---------- ------------ ------- ----------- 
|   118111 | 2/18/2020  | A     | Valid     |
|   118111 | 10/15/2020 | A     | Valid     |
|   118216 | 1/31/2020  | B     | Valid     |
|   118216 | 5/16/1981  | B     | Valid     |
|   118291 | 6/9/2020   | A     | Valid     |
|   118291 | 12/5/2020  | A     | Valid     |
|   118533 | 4/9/2020   | A     | Not valid |
|   118533 | 11/11/2020 | B     | Not valid |
|   118533 | 7/22/2020  | C     | Valid     |
|   118533 | 10/25/2020 | C     | Valid     |
|   118293 | 3/30/2020  | A     | Not valid |
|   118293 | 3/30/2020  | A     | Not valid |
|   118499 | 4/16/2020  | B     | Valid     |
|   118499 | 7/26/2020  | B     | Valid     |
|   118499 | 3/25/2020  | A     | Not valid |
 ---------- ------------ ------- ----------- 
 

Я сделал запрос, который проверяет только 2 записи, но не смог найти решение для проверки более 2 записей.

 select mc.* 
    FROM table1 AS mc
    JOIN table1 AS ma ON ma.memberid = mc.memberid
        AND ma.date != mc.date
        AND ma.class = mc.class
 

Ответ №1:

Предполагая, что вы просто хотите memberid , чтобы вы могли нам HAVING :

 SELECT memberid
FROM dbo.YourTable
GROUP BY memberid
HAVING COUNT(DISTINCT [Date]) > 2;
 

Комментарии:

1. Но мне тоже нужно проверить класс.

2. Добавить Class в GROUP BY и SELECT @AnantGupta ? Вы не говорите нам, каковы ожидаемые результаты, поэтому я сделал небольшое предположение.