Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1939 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete mysql / where selection par semaine ???

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete mysql / where selection par semaine ???

n°885794
nickylarso​n
Posté le 29-10-2004 à 14:07:56  profilanswer
 

Bonjour,
 
voila j'ais une DB mysql, avec dans chaqu'une de mes tables un champs datetime.
 
deux pb se pose t'a moi.
 
1er/ je souhaite faire une selection de champs avec en clause where et une selection par semaine (mais pas par numero de semaine sur l'année) mais par la date actuelle moins 1 ou 2 ou 3 semaine en arrières.
es possible avec mysql ?
 
2eme/ je souhaite afficher un calcul entre deux tables sous mysql :
dans chaqu'une des tables il y a 14 enregistrement, je veux qu'il me fasse un calcul ligne par ligne. et quand je fais cette requete il me m'affiche 14 fois 14 lingnes.
 
select T8 * France from web_asr_x, web_clients_x  
 
si vous avez une idée !!!
 
merci d'avance  
 
 
 
 
 

mood
Publicité
Posté le 29-10-2004 à 14:07:56  profilanswer
 

n°885865
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 15:08:57  profilanswer
 

1/ File un exemple, c'est pas clair ce que tu dis.
2/ Faudrait penser à lui indiquer un critère de jointure. Généralement, c'est web_adr_x.id = web_clients_x.asrid par exemple.

n°885884
nickylarso​n
Posté le 29-10-2004 à 15:23:21  profilanswer
 

Problem N°1/
voila un exemple de requete que j'utilise sous sql server:
select count(*) from dbo.billing_record  
 where phone_number like '225%'
 and pin ='PAR'
 and start_time > substring (convert (varchar (8),dateadd(week,-1,getdate()),112),1,8) + ' 00:00:00.000'
 and start_time < substring (convert (varchar (8),dateadd(week,-1,getdate()),112),1,8) + ' 23:59:59.000'
 
ceci fonction ce qui veut qu'il va m'afficher les resultats de la semaine actuelle -1 semaine. donc si nous sommes en semaine 43 il va afficher la semaine 42.

n°885921
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 15:54:06  profilanswer
 

1/ Déjà, j'ai du mal avec ta requête SQL Server :D Elle retourne les infos du jour n-7 c'est ça ?
 
Bon... Je connais pas la fonction mysql qui retourne la date. On va dire que c'est la même que sous Oracle, c'est à dire la "constante" sysdate.
 
select count(*) from dbo.billing_record  
where phone_number like '225%'  
and pin ='PAR'  
and DATE(start_time) = CURDATE() - 7;
 
D'après cette doc :
http://dev.mysql.com/doc/mysql/fr/ [...] tions.html

n°885929
nickylarso​n
Posté le 29-10-2004 à 16:01:15  profilanswer
 

1/ Enfaite nan c'est pas jour n-7 mais semaine n-1 (du lundi au dimanche mais de la semaine derniére)

n°885936
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 16:04:44  profilanswer
 

D'ailleurs, pour ta requête MSSQL, je pense que :
 
select count(*) from dbo.billing_record  
where phone_number like '225%'  
and pin ='PAR'  
and CONVERT(char(8), start_time, 112) = CONVERT(char(8), getDate(), 112)
 
Ce serait pas plus mal :)

n°885943
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 16:07:50  profilanswer
 

nickylarson a écrit :

1/ Enfaite nan c'est pas jour n-7 mais semaine n-1 (du lundi au dimanche mais de la semaine derniére)


La requête telle que tu l'as écrite pour MSSQL fait n-7, pas "la semaine dernière".
 
Alors essaie ça :
 
select count(*) from dbo.billing_record    
where phone_number like '225%'  
and pin ='PAR'  
and WEEK(start_time, 1) = WEEK(CURDATE() - 7, 1);
and YEAR(start_time, 1) = YEAR(CURDATE() - 7, 1)
 
Et pour MSSQL, c'est quasi la même syntaxe.

n°885956
Sebastien
Posté le 29-10-2004 à 16:22:46  profilanswer
 

en mysql
 
Recupere tous les enregistrements de la semaine derniere (la semaine commence le lundi)
select *
from table
where week(ton_chap_date, 1) + 1 = week(now(), 1)
and year(ton_chp_date) = year(now());
 
oops j'ai oublie de preciser que c sur la meme année :)
faudra peut etre l'ameliorer au debut janvier


Message édité par Sebastien le 29-10-2004 à 16:24:23
n°885960
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 16:27:26  profilanswer
 

C'est la requête que j'ai écrit la ligne plus haut (sauf que j'ai utilisé "CURDATE()" au lieu de "NOW()", et qu'au lieu d'ajouter une semaine, j'en ai enlevé 7 jours) ;)
 
Deplus, à cause du second point, le 3 janvier 2005 ça marchera pas ton bidule ;)


Message édité par Arjuna le 29-10-2004 à 16:28:38
n°885966
Sebastien
Posté le 29-10-2004 à 16:43:02  profilanswer
 

Ca a pas l'air non plus de marche avec ton systeme.

Code :
  1. mysql> select date_reception, week((date_reception)-7, 1) from reclamation where week(date_reception,1) = 1 limit 5;
  2. +----------------+-----------------------------+
  3. | date_reception | week((date_reception)-7, 1) |
  4. +----------------+-----------------------------+
  5. | 2003-01-04     |                        NULL |
  6. | 2003-01-03     |                        NULL |
  7. | 2003-01-02     |                        NULL |
  8. | 2003-01-03     |                        NULL |
  9. | 2003-01-03     |                        NULL |
  10. +----------------+-----------------------------+
  11. mysql> select date_reception, week((date_reception)-7, 1) from reclamation where week(date_reception,1) = 5 limit 5;
  12. +----------------+-----------------------------+
  13. | date_reception | week((date_reception)-7, 1) |
  14. +----------------+-----------------------------+
  15. | 2003-01-31     |                           4 |
  16. | 2003-01-28     |                           4 |
  17. | 2003-01-27     |                           4 |
  18. | 2003-01-29     |                           4 |
  19. | 2003-01-30     |                           4 |
  20. +----------------+-----------------------------+
  21. 5 rows in set (0.00 sec)


Message édité par Sebastien le 29-10-2004 à 16:44:00
mood
Publicité
Posté le 29-10-2004 à 16:43:02  profilanswer
 

n°885980
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 17:08:14  profilanswer
 

Ben... C'est null MySQL... Y'a un problème là, parceque normalement ça doit marcher sans problème !
 
Pour moi c'est un bug de MySQL.


Message édité par Arjuna le 29-10-2004 à 17:08:35
n°885981
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 17:13:39  profilanswer
 

Avec Oracle :
 
select datcre, to_char(to_date(datcre, 'YYYYMMDD') - 7, 'WW')
from eve
where codsoc = 0
and achvte = 'V'
and typeve = 'CDE'  
and to_char(to_date(datcre, 'YYYYMMDD'), 'WW') = 1
and datcre > '2004'
and rownum < 6
 
DATCRE TO_CHAR(TO_DATE(DATCRE,'YYYYMM
20040102 52
20040102 52
20040102 52
20040102 52
20040102 52
 
Et
 
select datcre, to_char(to_date(datcre, 'YYYYMMDD') - 7, 'WW')
from eve
where codsoc = 0
and achvte = 'V'
and typeve = 'CDE'  
and to_char(to_date(datcre, 'YYYYMMDD'), 'WW') = 2
and datcre > '2004'
and rownum < 6
 
DATCRE TO_CHAR(TO_DATE(DATCRE,'YYYYMM
20040108 01
20040108 01
20040108 01
20040108 01
20040108 01

n°885983
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 17:16:16  profilanswer
 

PS: Même si ça ressemble pas, c'est rigoureusement la même requête que la tienne, sauf que j'ai pas de champ de type date dans ma base, donc je dois les caster un coup avant :D

n°886064
nickylarso​n
Posté le 29-10-2004 à 18:22:31  profilanswer
 

OK merci a tout les deux pour ces infos.
je vais faire les tests et je vous dis ce que cela donne.
mais cela me semble un peu complique de faire une selection par semaine, sous ms sql serveur auriez vous la solution pour selection le mois precedent  
exemple : (mais ca marche pas !! )  
select * from x where datepart(month,getdate()) -1  
 
 
concernant mon 2eme probleme les deux tables n'ont aucun champs commun (identique).

n°886119
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-10-2004 à 20:01:12  profilanswer
 

T'as pas la doc de SQL Server ?
 

Citation :


 Référence de Transact-SQL  
 
 
DATEPART
Renvoie un entier représentant l'élément de date précisé dans la date spécifiée.
 
Syntaxe
DATEPART ( datepart , date )  
 
Arguments
datepart
 
Paramètre qui indique la partie de date à renvoyer. La table suivante répertorie les éléments de date et les abréviations que reconnaît Microsoft® SQL Server™.
 
datepart Abréviations  
year yy, yyyy  
quart qq, q  
month mm, m  
dayofyear dy, y  
day dd, d  
weeek wk, ww  
weekday dw  
hour hh  
minute min  
second ss, s  
millisecond ms  
 
 
L'élément de date semaine (wk, ww) reflète les modifications apportées à SET DATEFIRST. Le 1er janvier d'une année définit le nombre de départ de l'élément de date semaine, par exemple : PARTIE_DE_DATE(wk, 'Jan 1, xxxx') = 1, avec xxxx représentant une année quelconque.
 
L'élément de date weekday (dw) renvoie un nombre correspondant au jour de la semaine, par exemple : Dimanche = 1, samedi = 7. Le nombre obtenu à l'aide de l'élément de date weekday dépend de la valeur configurée par SET DATEFIRST qui définit le premier jour de la semaine.
 
date
 
Expression correspondant à une valeur de type datetime ou smalldatetime, ou encore à une chaîne de caractères dans un format de date. N'utilisez le type de données datetime que pour les dates postérieures au 1er janvier 1753. Stockez en tant que données caractère les dates antérieures. Lorsque vous saisissez des valeurs de type datetime, faites-les toujours figurer entre guillemets. Étant donné que la minute est la précision de smalldatetime, en cas d'utilisation d'une valeur smalldatetime, les secondes et les millisecondes sont toujours égales à 0.
 
Si vous précisez seulement les deux derniers chiffres de l'année, les valeurs inférieures ou égales aux deux derniers chiffres de la valeur de l'option de configuration two digit year cutoff appartiennent au même siècle que l'année de coupure. Les valeurs supérieures aux deux derniers chiffres de la valeur de cette option appartiennent au siècle qui précède l'année de coupure. Par exemple, si l'option coupure des années à deux chiffres a pour valeur 2049 (valeur par défaut), 49 est interprété comme 2049 et 2050 est interprété comme 1950. Pour éviter toute ambiguïté, rédigez les années à l'aide de quatre chiffres.
 
Pour plus d'informations sur la définition des valeurs horaires, voir Formats d'heure. Pour plus d'informations sur la spécification des dates, voir datetime et smalldatetime.  
 
Type des valeurs renvoyées
int
 
Notes
Les fonctions DAY, MONTH et YEAR sont synonymes de DATEPART(dd, date), DATEPART(mm, date), et DATEPART(yy, date), respectivement.
 
Exemple
La fonction GETDATE renvoie la date actuelle. Cependant, la date complète n'est pas toujours l'information requise pour la comparaison (souvent seule une partie de la date fait l'objet d'une comparaison). L'exemple suivant montre les résultats obtenus par les fonctions GETDATE et DATEPART.
 
SELECT GETDATE() AS 'Current Date'
GO
 
Voici le jeu de résultats obtenu :
 
Current Date                
---------------------------  
Feb 18 1998 11:46PM          
 
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
GO
 
Voici le jeu de résultats obtenu :
 
Month Number  
------------  
2            
 
L'exemple suivant suppose que la date est le 29 mai :
 
SELECT DATEPART(month, GETDATE())
GO
 
Voici le jeu de résultats obtenu :
 
-----------  
5            
 
(1 row(s) affected)
 
Dans cet exemple, la date apparaît comme un nombre. Retenez que, pour SQL Server, 0 est le 1er janvier 1900.
 
SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)
 
Voici le jeu de résultats obtenu :
 
----- ------ ------
1     1      1900
 
 
Voir aussi
 
CAST et CONVERT
 
Types de données
 
Fonctions de date et d'heure
 
©1988-2000 Microsoft Corporation. Tous droits réservés.

n°886254
nickylarso​n
Posté le 30-10-2004 à 00:04:40  profilanswer
 

ok bien recu toutes mes requetes fonctionne,
par contre j'ais un souci de debut de semaine qui commence le dimanche et pas le lundi -- j'ais taper cette commande mais sans succé : set datefirst 1
 
quelqu'un peu me dire comment definir dans mon sql server 2000 de facon permanente, que la semaine commence le lundi et pas le dimanche.
 
merci bien

n°887938
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-11-2004 à 19:47:50  profilanswer
 

nickylarson a écrit :

ok bien recu toutes mes requetes fonctionne,
par contre j'ais un souci de debut de semaine qui commence le dimanche et pas le lundi -- j'ais taper cette commande mais sans succé : set datefirst 1
 
quelqu'un peu me dire comment definir dans mon sql server 2000 de facon permanente, que la semaine commence le lundi et pas le dimanche.
 
merci bien


Logiquement, c'est hétité des paramètres régionaux du compte administrateur système de la machine.
 
Si ça ne fait rien, alors change juste les paramètres de SQL Server pour qu'il tourne sous ce compte et non pas le compte system.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete mysql / where selection par semaine ???

 

Sujets relatifs
pb pour afficher resultat requete mssql[MySQL] valeur fixe dans requete de type select
Script php/mysql ... quel prix ?JBoss et MySql : Pb de timeout
[python] pb connection ODBC et requete INSERTRequete pour lot DTS - SQL SERV 2000
sélection multiple dans une ListBox[MSQUERY ORACLE] impossible d'editer des requete dans excel
Probleme avec une requête 
Plus de sujets relatifs à : Requete mysql / where selection par semaine ???


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR