Cómo calcular primera ocurrencia del evento, agrupados por tipo?

xii:

Disculpas por la pregunta básica, no pude encontrar la respuesta después de la búsqueda.

Tengo una tabla w / equipo , fruta , caso , y fecha y hora .

CREATE TABLE table1
(`team` int, `event` varchar(6), `fruit` varchar(6), 
`timestamp` timestamp)
;

INSERT INTO table1
(`team`, `event`, `fruit`, `timestamp`)
VALUES
(100, 'seen', 'apple', '2005-06-20 12:13:00'),
(100, 'bought', 'apple', '2005-06-20 12:14:00'),
(100, 'seen', 'banana', '2005-06-20 12:15:00'),
(200, 'seen', 'apple', '2005-06-20 12:16:00'),
(200, 'seen', 'apple', '2005-06-20 12:16:00'),
(200, 'seen', 'banana', '2005-06-20 12:16:00'),
(300, 'seen', 'orange', '2005-06-20 12:16:00'),
(300, 'seen', 'apple', '2005-06-20 12:16:00'),
(300, 'bought', 'orange', '2005-06-20 12:17:00'),
(300, 'bought', 'apple', '2005-06-20 12:18:00')
;

El objetivo es calcular el número de equipos comprados cada tipo de fruta como la primera compra del día.

Esto es suponiendo que todos los datos en la tabla es del mismo día.

Esperado es: Manzana = 1, naranja = 1, plátano = 0.

Además, el guión ideal sería tener en cuenta los valores nulos de la marca de tiempo.

Soy un principiante en SQL y este script no es la contabilidad para los equipos.

select fruit, count((select min(timestamp) from table1
where event = "bought")) 
from table1
group by fruit
;

¡Gracias de antemano!

Fresa :

Considera lo siguiente:

DROP TABLE IF EXISTS table1;

CREATE TABLE table1
(activity_id SERIAL PRIMARY KEY
,`team` int
,`event` varchar(6)
,`fruit` varchar(6),
`timestamp` timestamp)
;

INSERT INTO table1
(`team`, `event`, `fruit`, `timestamp`)
VALUES
(100, 'seen', 'apple', '2005-06-20 12:13:00'),
(100, 'bought', 'apple', '2005-06-20 12:14:00'),
(100, 'seen', 'banana', '2005-06-20 12:15:00'),
(200, 'seen', 'apple', '2005-06-20 12:16:00'),
(200, 'seen', 'apple', '2005-06-20 12:16:00'),
(200, 'seen', 'banana', '2005-06-20 12:16:00'),
(300, 'seen', 'orange', '2005-06-20 12:16:00'),
(300, 'seen', 'apple', '2005-06-20 12:16:00'),
(300, 'bought', 'orange', '2005-06-20 12:17:00'),
(300, 'bought', 'apple', '2005-06-20 12:18:00')
;

Esto es suponiendo que todos los datos en la tabla es del mismo día.

SELECT fruit
     , COUNT(*) total 
  FROM table1 x 
  JOIN 
     ( SELECT MIN(activity_id) activity_id FROM table1 WHERE event = 'bought' GROUP BY team ) y 
    ON y.activity_id = x.activity_id 
 GROUP 
    BY fruit;
+--------+-------+
| fruit  | total |
+--------+-------+
| apple  |     1 |
| orange |     1 |
+--------+-------+

Todos los aspectos restantes a este problema pueden (y, en mi opinión, deberían) ser resueltos en el código de la aplicación.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298421&siteId=1
Recomendado
Clasificación