Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
Cómo crear una consulta que devuelva datos agrupados por fecha sin repetición en Laravel

Tengo una tabla de scans en mi base de datos, donde se registra la actividad de escaneo de un usuario y un usuario puede tener múltiples actividades en un día. Estoy buscando la mejor manera de obtener la suma de todos los escaneos de un usuario en particular durante un período de días.

Intenté lo siguiente en mi código, pero supongo que me falta algo, ya que me gustaría agregar los escaneos para un usuario que se realizó el mismo día.

 DB::table('scans')->select(DB::raw('count(*) as total, scanner, created_at'))->where('scanner', 'Jon Snow')->groupBy('created_at')->get() => Illuminate\Support\Collection {#3313 all: [ {#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:40", }, {#3327 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 19:44:18", }, {#3323 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-28 20:30:30", },

Así que en lugar de esto:

 {#3304 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:32:58", }, {#3321 +"total": 1, +"scanner": "Jon Snow", +"created_at": "2020-07-26 19:43:40", },

yo tendria esto:

 {#3304 +"total": 2, +"scanner": "Jon Snow", +"created_at": "2020-07-26", }, {#3304 +"total": 5, +"scanner": "Jon Snow", +"created_at": "2020-07-28", },
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Problema:

En este momento estás haciendo groupBy(created_at) . Dado que casi todos los escaneos tienen una fecha y hora diferente, groupBy no funcionará como se esperaba.


Soluciones:

Si entendí correctamente, desea el groupBy por fecha de created_at sin la hora. Para eso, tendrá que seleccionar solo la parte de la fecha de su columna de fecha y hora. Hay 2 formas de hacer esto:

 DB::raw('count(*) as total, DATE_FORMAT(created_at, "%Y-%m-%d") as someDate, scanner') ->where('scanner', 'Jon Snow') ->groupBy('someDate') ->get()

@editar

También podrías hacer DATE(created_at) as someDate


Ejemplo:

Tengo 4 Usuarios insertados en mi Base de Datos:

  • 2 han creado_en => '2020-05-05 10:10:10'
  • 2 han creado_en => '2020-10-10 10:10:10'

Resultado:

 Illuminate\Support\Collection {#1945 #items: array:2 [ 0 => {#1952 +"count": 2 +"new_date": "2020-05-05" } 1 => {#2092 +"count": 2 +"new_date": "2020-10-10" } ] }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda