Muszę stworzyć zapytanie, które pokaże kwotę wstawionego zapytania każdego dnia posortowanego przez typ. To brzmi dość niejasne, więc pokażę to poniżej:

+----+------+----------+
| 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 |
+----+------+----------+

Wynik musi być:

+------+----------+--------+
| 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 |
+------+----------+--------+

Próbowałem już kilka zapytań z grupą i odrębną, ale nie mogę zrozumieć, jak uzyskać duplikatów.

Już próbowałem: SELECT date, type, count(*) FROM table GROUP BY date, type Ale to daje mi duplikaty kombinacji daty / typów. To właśnie powraca:

duplicates

1
Luud van Keulen 15 luty 2017, 18:30

2 odpowiedzi

Najlepsza odpowiedź

Grupa przez type i według dnia (tj. TRUNC( inserted )):

Konfiguracja 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;

Zapytanie :

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

Wyjście :

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
2
MT0 15 luty 2017, 15:53

Czy to działa dla Ciebie?

select type, inserted,  count(inserted)
  from tmp_table 
  group by type, inserted 
0
Kostis 15 luty 2017, 15:45