Estoy usando una consulta de selección para seleccionar miembros, una variable que sirve como identificador único y la fecha de la transacción, un formato de fecha (MM / DD / AAAA).

Select Members , transaction_date,
FROM table WHERE Criteria = 'xxx'
Group by Members, transaction_date;

Mi objetivo final es contar el número de miembros únicos por mes (es decir, un miembro único en el día 3, 6, 12 de un mes solo se cuenta una vez). No quiero seleccionar ningún dato, sino ejecutar este cálculo (contar distintos por mes) y generar el cálculo.

0
ZJAY 29 ene. 2016 a las 04:56

3 respuestas

La mejor respuesta

Esto dará un recuento distinto por mes.

SQLFiddle Demo

select month,count(*) as distinct_Count_month 
from
(
    select members,to_char(transaction_date, 'YYYY-MM') as month
    from table1
    /* add your where condition */
    group by members,to_char(transaction_date, 'YYYY-MM')
) a
group by month

Entonces, para esta entrada

+---------+------------------+
| members | transaction_date |
+---------+------------------+
|       1 | 12/23/2015       |
|       1 | 11/23/2015       |
|       1 | 11/24/2015       |
|       2 | 11/24/2015       |
|       2 | 10/24/2015       |
+---------+------------------+

Obtendrás esta salida

+----------+----------------------+
|  month   | distinct_count_month |
+----------+----------------------+
| 2015-10  |                    1 |
| 2015-11  |                    2 |
| 2015-12  |                    1 |
+----------+----------------------+
1
Utsav 29 ene. 2016 a las 02:34

Use COUNT (miembros DISTINCT) y date_trunc ('month', transaction_date) para retener las marcas de tiempo para la mayoría de los cálculos (y esto también puede ayudar a ordenar el resultado). to_char () se puede usar para controlar el formato de visualización, pero no se requiere en ningún otro lugar.

SELECT
      to_char(date_trunc('month', transaction_date), 'YYYY-MM')
    , COUNT(DISTINCT members) AS distinct_Count_month
FROM table1
GROUP BY
      date_trunc('month', transaction_date)
;

Muestra de resultado:

| to_char | distinct_count_month |
|---------|----------------------|
| 2015-10 |                    1 |
| 2015-11 |                    2 |
| 2015-12 |                    1 |

Ver: http://sqlfiddle.com/#!15/57294/2

0
Used_By_Already 29 ene. 2016 a las 03:01

Es posible que desee probar esto. Esto podría funcionar.

SELECCIONE REEMPLAZAR (CONVERTIR (FECHA, fecha_transacción, 101), '-', '/') COMO [FECHA],
CONTAR (MIEMBROS) COMO [NO DE MIEMBROS]
DESDE EL BAR
DONDE REPLACE (CONVERT (DATE, transaction_date, 101), '-', '/') IN
(
SELECT REPLACE (CONVERT (DATE, transaction_date, 101), '-', '/')
DESDE BAR
)
AGRUPAR POR REEMPLAZO (CONVERTIR (FECHA, fecha_transacción, 101), '-', '/')
ORDER BY REPLACE (CONVERT (DATE, transaction_date, 101), '-', '/')

0
bipartite 29 ene. 2016 a las 02:37