web-dev-qa-db-fra.com

MySQL Query pour sélectionner les données de la semaine dernière?

Bonjour, j'ai une table avec un champ de date et quelques autres informations .. Je veux sélectionner toutes les entrées de la semaine passée (semaine à partir du dimanche).

valeurs de la table:

id  date
2   2011-05-14 09:17:25
5   2011-05-16 09:17:25
6   2011-05-17 09:17:25
8   2011-05-20 09:17:25
15  2011-05-22 09:17:25

Je veux sélectionner tous les identifiants de la semaine dernière, la sortie attendue est 5, 6, 8 . (l'identifiant 2 n'est pas dans la semaine dernière et l'identifiant 15 est dans la semaine en cours.)

Comment écrire et requête SQL pour le même.

82
coderex
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
109
piotrm
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
116
mr_eclair
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

J'utilise la fonction YEARWEEK spécifiquement pour revenir à la semaine calendaire précédente (au lieu de 7 jours avant aujourd'hui). YEARWEEK autorise également un deuxième argument qui déterminera le début de la semaine ou déterminera le traitement de la première/dernière semaine de l'année. YEARWEEK vous permet de conserver le nombre de semaines à reculer/avancer dans une seule variable et n'inclut pas le même nombre de semaines des années précédentes/à venir.

13
timecrust

Forme simplifiée:

Données de la semaine dernière: 

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );

Il y a 2 semaines data: 

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );

SQL Fiddle

http://sqlfiddle.com/#!8/6fa6e/2

12
Anam

Vous pouvez faire votre calcul en php puis l'ajouter à votre requête:

$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago

$sql = "SELECT * FROM table WHERE date <='$date' ";

maintenant cela donnera la date pour il y a une semaine

7
Ibu

Le moyen le plus simple serait probablement:

SELECT id
FROM table
WHERE date >= current_date - 7

Pendant 8 jours (lundi au lundi)

3
useless

Un moyen simple peut être celui-ci, ceci est un exemple réel tiré de mon code et fonctionne parfaitement:

where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")
2

Vous aurez besoin de calculer quel jour par rapport à aujourd'hui est dimanche dans votre middleware (php, python, etc.) *

Ensuite,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • peut être aussi un moyen d’obtenir la date du dimanche par rapport à aujourd’hui dans MySQL; ce serait sans doute la solution plus propre si pas trop cher à effectuer
2
virtualeyes

Cela peut être en une seule ligne: 

SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
2
Abhinav bhardwaj

S'IL VOUS PLAÎT les gens ... 'La semaine dernière' comme l'OP a demandé et où je cherchais (mais aucune des réponses satisfaisantes) est la dernière semaine. 

Si aujourd'hui nous sommes mardi, alors DERNIÈRE SEMAINE sera du lundi une semaine avant au dimanche une semaine avant.

Alors:

WHERE
    WEEK(yourdate) = WEEK(NOW()) - 1

Ou pour les semaines ISO:

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
2
MS Berends

La requête ci-dessus ne fonctionnera pas . Après la clause where, si nous ne pouvons pas CAST la valeur de la colonne, cela ne fonctionnera pas. Vous devriez cast la valeur de la colonne. 

par exemple.:

SELECT.....
WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )
1
user7821340

Vous pouvez aussi l'utiliser facilement

SELECT *
FROM   inventory
WHERE  YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)
0
HAROONMIND
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
0
veeresh i

je l'utilise pour la semaine commençant le DIMANCHE:

SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY  
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY
0
Hoàng Vũ Tgtt

Je fais souvent aussi une rapide vérification de la "semaine dernière" et ce qui suit a tendance à bien fonctionner pour moi et inclut aujourd'hui.

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 

SET @StartDate = Getdate() - 7 /* Seven Days Earlier */
SET @EndDate = Getdate() /* Now */

SELECT id 
FROM   mytable 
WHERE  date BETWEEN @StartDate AND @Enddate 

Si vous souhaitez que ceci ne soit PAS inclus aujourd'hui, il vous suffit de soustraire un jour supplémentaire de la @EndDate. Si je sélectionne ces deux variables aujourd'hui obtenir 

@StartDate 2015-11-16 16: 34: 05.347/* Lundi dernier * /

@EndDate 2015-11-23 16: 34: 05.347/* Ce lundi * /

Si je voulais dimanche au dimanche, j'aurais le suivant.

SET @StartDate = Getdate() - 8 /* Eight Days Earlier */
SET @EndDate = Getdate() - 1  /* Yesterday */

@StartDate 2015-11-15 16: 34: 05.347/* Dimanche précédent * /

@EndDate 2015-11-22 16: 34: 05.347/* Dimanche dernier * /

0
Izulien

Pour plus d’exemple Comme le mois dernier, l’année dernière, les 15 derniers jours, les 3 derniers mois

Récupérer le dernier enregistrement de la semaine

Utilisation de la requête MySQL ci-dessous pour extraire les derniers enregistrements de la table de base de données mysql.

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)
0
Developer
SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 
0
Manoj