/ / Obtenir des enregistrements distincts pour un jour mais en les comptant plusieurs fois pour la plage de dates - mysql, sql

Obtenir des enregistrements distincts pour une journée mais les compter plusieurs fois pour la plage de dates - mysql, sql

Je travaille sur une requête où je cherchenuméros de commande. Je dois filtrer les numéros de commande uniques pour la journée. Pour cela, j'ai utilisé count (numéro_ordre distinct) dans ma requête principale. Cette requête prend les dates de début et de fin du front-end et les utilise. Cependant, j'ai un problème, s'il y a le même numéro d'ordre pendant 2 jours dans la plage, il sera compté pour les deux jours. c'est à dire. Compter le nombre de commandes uniques pour une journée. Au début, je pensais utiliser une boucle sur les dates et faire la somme des résultats, mais cela ne me semble pas juste. Je serais plus intéressé d'utiliser la même requête et de la modifier pour des commandes distinctes en fonction de la date. Voici ma requête:

SELECT "site1" AS site,
DATE_FORMAT(l.login_time, "%m/%d/%Y") AS DATE,
COUNT(DISTINCT osh.order_num) AS total_orders
FROM order_history o
INNER JOIN logs l ON o.userID = l.id
WHERE o.date_time BETWEEN 1380524400 AND 1380610799
AND l.LOGIN BETWEEN FROM_UNIXTIME(1380524400) AND FROM_UNIXTIME(1380610799)
GROUP BY DATE

Exemple

Supposons que pour la date du 29 août, les ordres o1, o2, o1, o3, o2 soient comptés comme 3 ordres distincts, à savoir o1, o2,03. pour le 30 août, j’ai les ordres o1, o4, o4, o1, je les compterai comme deux ordres distincts, c’est-à-dire o1, o4

mais quand je demande pour 29-30 août je dois obtenir le compte de 3 + 2 = 5 c'est à dire que o1 est compté deux fois dans la plage sicne il appartient à deux dates diff.

Réponses:

2 pour la réponse № 1

Je pense que dans ce cas le WITH ROLLUP modificateur pourrait servir votre but

SELECT "site1" AS site,
DATE_FORMAT(l.login_time, "%m/%d/%Y") AS `DATE`,
COUNT(DISTINCT osh.order_num) AS total_orders
FROM order_history o
INNER JOIN logs l ON o.userID = l.id
WHERE o.date_time BETWEEN 1380524400 AND 1380610799
AND l.LOGIN BETWEEN FROM_UNIXTIME(1380524400) AND FROM_UNIXTIME(1380610799)
GROUP BY `DATE` WITH ROLLUP

Cela ajouterait une ligne supplémentaire à la fin de vos données qui résumerait le total_orders data (avec une valeur NULL pour DATE)

Voici la documentation sur ce modificateur: http://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html