Requete mysql / where selection par semaine ??? - SQL/NoSQL - Programmation
Marsh Posté le 29-10-2004 à 15:08:57
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.
Marsh Posté le 29-10-2004 à 15:23:21
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.
Marsh Posté le 29-10-2004 à 15:54:06
1/ Déjà, j'ai du mal avec ta requête SQL Server 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
Marsh Posté le 29-10-2004 à 16:01:15
1/ Enfaite nan c'est pas jour n-7 mais semaine n-1 (du lundi au dimanche mais de la semaine derniére)
Marsh Posté le 29-10-2004 à 16:04:44
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
Marsh Posté le 29-10-2004 à 16:07:50
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.
Marsh Posté le 29-10-2004 à 16:22:46
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
Marsh Posté le 29-10-2004 à 16:27:26
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
Marsh Posté le 29-10-2004 à 16:43:02
Ca a pas l'air non plus de marche avec ton systeme.
Code :
|
Marsh Posté le 29-10-2004 à 17:08:14
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.
Marsh Posté le 29-10-2004 à 17:13:39
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
Marsh Posté le 29-10-2004 à 17:16:16
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
Marsh Posté le 29-10-2004 à 18:22:31
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).
Marsh Posté le 29-10-2004 à 20:01:12
T'as pas la doc de SQL Server ?
Citation : |
Marsh Posté le 30-10-2004 à 00:04:40
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
Marsh Posté le 01-11-2004 à 19:47:50
nickylarson a écrit : ok bien recu toutes mes requetes fonctionne, |
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.
Marsh Posté le 29-10-2004 à 14:07:56
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