Requête SQL avec traitement d'un champ date [RESOLU] - SQL/NoSQL - Programmation
Marsh Posté le 16-08-2010 à 12:43:28
Tu dois d'abord trouver la fonction qui te permet d'avoir le numero absolu du jour (donc pas le jour depuis le debut de l'année mais depuis la date 0 du SGBD), tu fais un Group By la dessus.
Puis tu dois trouver la fonction qui te donnes le numero du jour de la semaine (Samedi sera probablement numero 7) et tu utilises ca dans ton Where.
Voila ce que ca donne en SQL Server:
Code :
|
Si tu veux ajouter la moyenne ca deviens un peut plus compliqué:
Code :
|
Marsh Posté le 16-08-2010 à 14:06:59
Salut Oliiii, merci pour ta réponse
Je dois pas avoir la moitié du quart de ton expérience, du coup j'ai un peu de mal à lire et à comprendre la logique de cet exemple.
- convert(float,backup_start_date) => à quoi correspond "backup_start_date" ? C'est le champ c'est ça ? Dans mon cas, "date_vente" ? => Pourquoi convertir "date_vente" en float ?
- 'DayNumber' c'est la variable dans laquelle je stocke (on appelle ça un alias je crois non ?) Il manque pas un AS à ce moment là ?
- Ensuite le CONVERT suivant, que fait-il ? Il retransforme en timestamp ?
- DATEPART(dw,backup_start_date) = 7 => ça correspond à Dimanche ça non ? Ou à samedi si on considère que la semaine débute le Dimanche ? Tu confirmes ? Donc en fonction du jour qui m'intéresse, je dois modifier la valeur (entre 1 pour dimanche, et 7 pour samedi) ?
Serait-ce abuser de te demander ce que ça donne avec le nom de ma table ("VENTES" ) et le champ "date_vente" ? Ca me rendrait la requête un peu plus lisible, je pourrais ainsi plus facilement en comprendre la logique.
En attendant, je me lance : ma requête (sans la moyenne), serait donc :
Code :
|
?
J'ai essayé de la faire tourner dans phpMyAdmin, apparemment il y a un erreur de syntaxe.
Marsh Posté le 16-08-2010 à 14:57:15
Bonjour,
Essaie ça :
SELECT SUM(nb_vente) as nb_vente, DATE_FORMAT(FROM_UNIXTIME(date_vente), '%Y-%m-%d') as date_vente
FROM vente
WHERE DATE_FORMAT(FROM_UNIXTIME(date_vente), '%w') = 6
GROUP BY date_vente
Ensuite, tu fais la mise en forme de la date en PHP.
Marsh Posté le 16-08-2010 à 15:03:59
Salut jeca, merci, ça fonctionne impeccable (sauf que c'est COUNT au lieu de SUM)
Je vais bidouiller pour compléter la requête, en attendant merci de m'avoir fourni cette base
Bonne journée !
Marsh Posté le 16-08-2010 à 16:21:11
Matisme a écrit : Salut Oliiii, merci pour ta réponse |
Convertir une date en float ca permet de la convertir en un numero: Maintenant = 40404,6566981481
40404 = jour (01/01/1900 + 40404 jours = 16/08/2010), 0.6566981481 = heures, minutes, secondes (15h45m38s).
FLOOR() permet d'arrondir vers le bas sans decimale, donc au final ca permet de n'avoir que le jour sans les heures, minutes, secondes.
Ca a l'air compliqué mais c'est extremement rapide (vue qu'une date est stockée en float en interne et un FLOOR n'est qu'une copie d'une zone memoire a une autre).
Matisme a écrit : |
Le AS est facultatif, mais theoriquement il en faut un oui.
Matisme a écrit : |
Il retransforme en Date mais sans les heures, minutes, secondes.
Matisme a écrit : |
C'est bien ca oui.
Matisme a écrit :
? |
Je ne connais pas assez MySQL pour faire ce genre de query, donc j'ai fais l'equivalent en SQL Server pour te donner une idée.
Marsh Posté le 16-08-2010 à 11:22:51
Bonjour à tous,
je bloque sur une requête SQL Select, voici le contexte.
J'ai une table SQL "VENTES" qui liste mes ventes.
Pour chaque vente, j'ai un champ "date_vente" contenant un timestamp (choppé via la fonction time() de PHP), qui correspond au moment précis où fut passée la vente.
Ce que j'aimerais faire, c'est récupérer le nombre de ventes par jour distinct.
Exemple :
combien de ventes je fais le JEUDI, sur la période des 6 derniers mois ?
ou
combien de ventes je fais le SAMEDI, sur les 2 dernières semaines ?
Exemple de résultat (boucle) :
- SAMEDI 14 Aout : 10 ventes
- SAMEDI 21 Aout : 11 ventes
- SAMEDI 28 Aout : 13 ventes
Ça, clairement, je suis pas assez calé en SQL pour savoir faire.
Et le bonus : si en plus je pouvais récupérer la moyenne via la même requête, ce serait le bonheur (bien que je puisse calculer ça en PHP par la suite).
Voilà, quelqu'un sait-il faire ça ?
Dans tous les cas merci du temps que vous voudrez bien m'accorder.
a+
Baptiste
Message édité par Matisme le 16-08-2010 à 15:12:52