Моя таблица выглядит следующим образом:
ID EMP_ID NAME ACTIVITY_DATE ACTIVITY_CODE
1 EMP01 ROCKY 2018-02-19 AC04
2 EMP02 SMITH 2018-02-19 AC09
3 EMP02 SMITH 2018-02-19 AC10
4 EMP01 ROCKY 2018-02-20 AC04
5 EMP01 ROCKY 2018-02-20 AC04
6 EMP03 RICKY 2018-02-22 AC05
7 EMP03 RICKY 2018-02-22 AC07
8 EMP02 SMITH 2018-02-22 AC09
Я хочу исключить повторяющиеся даты из результата запроса и отобразить все соответствующие поля по идентификатору, а моя таблица должна выглядеть так:
ID EMP_ID NAME ACTIVITY_DATE ACTIVITY_CODE COUNT
1 EMP01 ROCKY 2018-02-19 AC04 3
4 EMP01 ROCKY 2018-02-20 AC04 2
6 EMP03 RICKY 2018-02-22 AC05 3
Я пробовал этот запрос:
SELECT ID, EMP_ID, NAME, ACTIVITY_DATE, ACTIVITY_CODE
FROM emp_entries
GROUP BY ID, EMP_ID, NAME, ACTIVITY_DATE, ACTIVITY_CODE
Но это не исключает дублирование записей.
Его работа только в том случае, если я это сделаю:
SELECT COUNT(ACTIVITY_DATE), ACTIVITY_DATE
FROM emp_entries
GROUP BY ACTIVITY_DATE.
но он показывает только одно поле.
Use inner join and subquery:
select e1.ID ,e1.EMP_ID ,e1.NAME,e1.ACTIVITY_DATE,e1.ACTIVITY_CODE,e2.count
from emp_entries e1 inner join
(
SELECT COUNT(ACTIVITY_DATE) as count, ACTIVITY_DATE, min(id) as mid
FROM emp_entries
GROUP BY ACTIVITY_DATE
) e2 on e1.id=e2.mid
Вы можете использовать subquery
и join
к нему
SELECT e1.id,e1.EMP_ID,e1.NAME,e1.ACTIVITY_DATE ,e1.ACTIVITY_CODE,e2.cnt
FROM emp_entries e1
JOIN(
SELECT COUNT(ACTIVITY_DATE) as cnt,MIN(id) AS mId
FROM emp_entries
GROUP BY ACTIVITY_DATE) e2
ON e2.mId=e1.id
Когда вы группируете эту таблицу, вы должны использовать групповые функции, в вашем примере я вижу, что вы показываете первый элемент, поэтому я думаю, что этот запрос будет работать для вас.
SELECT
MIN(ID) as ID,
MIN(EMP_ID) as EMP_ID,
MIN(NAME) as NAME,
ACTIVITY_DATE,
MIN(ACTIVITY_CODE) as ACTIVITY_CODE,
COUNT(ID) as COUNT
FROM emp_entries
GROUP BY ACTIVITY_DATE
Для устранения дубликатов вам нужно использовать ключевое слово Distinct.
Выберите Distinct col1, col 2 и т.д.