2017-02-15 2 views
1

Мне нужно создать запрос, который будет показывать количество запросов, вставленных каждый день, отсортированных по типу. Это звучит довольно расплывчато, так что я продемонстрирую его ниже:Подсчитайте вставленные строки в день за тип

+----+------+----------+ 
| id | type | inserted | 
+----+------+----------+ 
| 1 | a | 1/2/2017 | 
| 2 | a | 1/2/2017 | 
| 3 | a | 2/2/2017 | 
| 4 | b | 1/2/2017 | 
| 5 | b | 1/2/2017 | 
| 6 | b | 2/2/2017 | 
| 7 | b | 3/2/2017 | 
| 8 | b | 3/2/2017 | 
+----+------+----------+ 

Результат должен быть:

+------+----------+--------+ 
| type | date | amount | 
+------+----------+--------+ 
| a | 1/2/2017 |  2 | 
| a | 2/2/2017 |  1 | 
| b | 1/2/2017 |  2 | 
| b | 2/2/2017 |  1 | 
| b | 3/2/2017 |  2 | 
+------+----------+--------+ 

Я уже пробовал несколько запросов с GROUP BY и DISTINCT, но я не могу понять, как не получайте дубликатов.

Я уже пробовал: SELECT date, type, count(*) FROM table GROUP BY date, type, но это дает мне дубликаты комбинаций даты/типа. Это то, что она возвращает:

duplicates

+0

Можете ли вы показать, что вы пробовали? – jjj

+0

Возможный дубликат [Использование группы по нескольким столбцам] (http://stackoverflow.com/questions/2421388/using-group-by-on-multiple-columns) – Ivar

+0

Я пробовал 'SELECT date, type, count (*) FROM table GROUP BY date, type', но имеет двойную комбинацию даты/типа. –

ответ

2

Группа по type и днем ​​(т.е. TRUNC(inserted)):

Настройка Oracle:

CREATE TABLE your_table (id, type, inserted) AS 
    SELECT 1, 'a', TO_DATE('2017-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 2, 'a', TO_DATE('2017-02-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 3, 'a', TO_DATE('2017-02-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 4, 'b', TO_DATE('2017-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 5, 'b', TO_DATE('2017-02-01 01:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 6, 'b', TO_DATE('2017-02-02 01:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 7, 'b', TO_DATE('2017-02-03 02:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL UNION ALL 
    SELECT 8, 'b', TO_DATE('2017-02-03 03:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 

Запрос:

SELECT type, 
     TRUNC(inserted) AS "date", 
     COUNT(1) AS amount 
FROM your_table 
GROUP BY type, 
     TRUNC(inserted); 

Выход:

TYPE date    AMOUNT 
---- ------------------- ------ 
a 2017-02-01 00:00:00  2 
a 2017-02-02 00:00:00  1 
b 2017-02-01 00:00:00  2 
b 2017-02-02 00:00:00  1 
b 2017-02-03 00:00:00  2 
+0

не выражение GROUP BY –

+0

@LuudvanKeulen Вы запустили его как напечатали? Он работает для меня на Oracle 11gR2. – MT0

+0

'Выбранный incosistend с группой по –

0

Это работает для вас?

select type, inserted, count(inserted) 
    from tmp_table 
    group by type, inserted 
+0

SQL Developer не распознает теги '[]'. –

+0

Квадратные скобки недействительны синтаксис оракула. – MT0

+0

Я пробовал в ms sql-server .... удалять скобки – Kostis

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