none
Cohortes SQL RRS feed

  • Pregunta

  • Hola! 

    Tengo esta tabla asi 

    date userid m1 m2 m3 m4 m5 m6 m7........ 2018-08-28 E8:D1:1B:08:FC:95 0 0 0 1 0 0 0 2018-09-06 F9:D1:1C:9M:FS:98 1 0 2 0 1 1 2 2018-09-11 A0:64:8F:B7:2D:A8 0 0 1 0 0 0 1 2017-10-18 a0:64:8f:28:8d:44 0 1 4 3 1 1 2 2017-09-25 e8:d1:1b:bc:4e:d4 1 1 1 0 1 2 0

    Y esto intentando programarlo en bigquery que es con lenguaje sql y conseguir algo tal que asi: 

    month      m0  m1  m2  m3  m4  m5  m6 ....
      1         6   3   6   3  10   5   4  
      2         6   6   8   10  5   3   0  
      3         3   5   1   2   2   0   0
     ...       ...........................

    Pero no tengo ni idea de como hacerlo ya que no consigo que a partir del segudno mes sepa cuales son los usuarios que vuelven a usar la app. Hay datos desde jul17 hasta abril18

    Gracias!!


    • Editado Mo0123 viernes, 22 de junio de 2018 8:58
    viernes, 22 de junio de 2018 8:57

Todas las respuestas

  • Hola MoO123:

    Te cuento lo que yo he entendido de tu propuesta y como yo veo la solución.

    Lo primero, aunque tu sintaxis sea Bigquery, le he echado un ojo por alto y como mucho tienes que cambiar la funcion de obtención del mes. El resto te es válido.

    /* Planteamiento del escenario */
    create table resumen (fecha date, userid int, m1 int, m2 int, m3 int,  m4 int, m5 int, m6 int, m7 int)
    /* el campo userid para mi facilidad lo he definido como int, partiendo de la base que es un identificador único por usuario */
    go
    insert into resumen (fecha, userid, m1,m2, m3, m4, m5, m6,m7)
    values
    ('20180828',1,0,0,0,1,0,0,0),
    ('20180906',2,0,0,0,1,0,0,0),
    ('20180911',3,1,0,0,1,0,0,0),
    ('20170725',4,0,0,2,0,0,0,0),
    ('20170724',1,0,0,0,1,0,0,0),
    ('20170806',1,0,0,1,10,4,0,0),
    ('20170923',2,0,0,0,0,0,0,0),
    ('20171028',1,2,1,0,1,0,0,0),
    ('20171021',3,0,0,0,2,0,2,0),
    ('20171115',1,0,0,0,1,0,0,3),
    ('20180828',1,0,0,0,1,0,0,0),
    ('20180101',2,0,0,0,1,0,0,0),
    ('20180211',3,1,0,0,1,0,0,0),
    ('20170725',4,0,0,2,0,0,0,0),
    ('20170724',1,0,0,0,1,0,0,0),
    ('20170806',1,0,0,1,10,4,0,0),
    ('20170923',2,0,0,0,0,0,0,0),
    ('20171028',1,2,1,0,1,0,0,0),
    ('20171021',3,0,0,0,2,0,2,0)


    /*he insertado algún dato más, pero en definitivas cuentas es lo mismo.*/
    go

    select (datepart(month,r.fecha) +((year(r.fecha)-2017)*12)-6) as mes, userid, sum(m1)as m1, sum(m2)  as m2, sum(m3) as m3, sum(m4) as m4, sum(m5) as m5, sum(m6) as m6, sum(m7) as m7
        from resumen r
            group by datepart(month,r.fecha), userid, year(r.fecha)
    order by mes


    La consulta, la primera parte es que tienes que extraer el mes de la fecha, y para que empiece en 2017 julio como mes uno le extraigo el año, le resto 2017 y lo que salga lo multiplico por 12 meses y finalmente le resto 6 para que el mes de julio sea 1.

    Luego el userid, que es el campo que tiene por lo que yo he entendido que mostrar el resumen de sus movimientos por meses, y a partir de ahí, sumo todoas filas, que sean de cada usuario por cada mes, por cada año. Ordenado por mes.

    Supongo que más o menos esto.

    Espero te ayude

    viernes, 22 de junio de 2018 16:30
  • Hola!!

    Gracias! de verdad tenia dudas si los datos vienen de una tabla seria entonces la parte de "create table" seria un select .... from mitabla? es que es lo que tengo duda porque como tengo la base de datos con unos 300 mil registros de ese modo definir meses o algo asi es un lio al menos para mi..

    Gracias!

    lunes, 25 de junio de 2018 8:29
  • Hola MoO123:

    Si, en realidad solo tienes que hacer un select from tu tabla.

    Un saludo

    miércoles, 27 de junio de 2018 20:22