Tengo una tabla con una columna REGDATE, un registro de la fecha (AAAA-MM-DD HH:MM:SS). Me gustaría mostrar un histograma (ExtJS) con el fin de comprender en qué período de los años los usuarios se están inscribiendo. Me gustaría hacer esto durante los últimos doce meses con respecto a la fecha actual y para el grupo de fechas por semana.

Alguna pista?

  • en que base de datos SQL?
InformationsquelleAutor Danilo | 2010-09-24

4 Comentarios

  1. 22

    en MySQL:

    SELECT COUNT(*), DATE_FORMAT(regdate, "%X%V") AS regweek FROM table GROUP BY regweek;
    

    o

    SELECT COUNT(*), YEARWEEK(NOW(), 2) as regweek FROM table GROUP BY regweek;
    

    en PostgreSQL:

    SELECT COUNT(*), EXTRACT(YEAR FROM regdate)::text ||  EXTRACT(WEEK FROM regdate)::text AS regweek FROM table GROUP BY regweek;
    
    • He probado el PostgreSQL y un error. Tuvo que añadir ::varchar después de EXTRAER(AÑO).
    • Para aquellos que buscan una PostgreSQL versión, Tom Gerken el ejemplo de abajo es el mejor. Se limita a 12 meses, cero las almohadillas de las fechas, y se encarga de datetime para la conversión del texto.
  2. 28

    Por lo que vale en PostgreSQL, Karaszi tiene una respuesta que funciona, pero hay una forma más rápida de consulta:

    SELECT date_trunc('week', REGDATE) AS "Week" , count(*) AS "No. of users"
    FROM <<TABLE>>
    WHERE REGDATE > now() - interval '12 months' 
    GROUP BY 1
    ORDER BY 1;
    

    He basado este fuera el trabajo de Ben Goodacre

    • Esto debe ser aceptado respuesta 😉
  3. 3

    Tal vez esto?

    select to_char(REGDATE,'WW') "Week number",
           count(*) "number of signups",
    from YOUR_TABLE
    where REGDATE > current_date-365
    group by to_char(REGDATE,'WW')
    order by to_char(REGDATE,'WW')
    
    • +1 para el uso de TO_CHAR. Yo quería única de una semana (en lugar de periódicos por año) así que he usado to_char(regdate, 'YYYY WW'), pero con la misma idea.
  4. 0

    Sugerencia: (SQL)

    SELECT CONVERT (VARCHAR(7), REGDATE, 120) AS [RegistrationMonth]
    FROM ...
    GROUP BY CONVERT (VARCHAR(7), REGDATE, 120)
    ORDER BY CONVERT (VARCHAR(7), REGDATE, 120)
    

Dejar respuesta

Please enter your comment!
Please enter your name here