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.
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
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.
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
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
Le moyen le plus simple serait probablement:
SELECT id
FROM table
WHERE date >= current_date - 7
Pendant 8 jours (lundi au lundi)
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)")
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
Cela peut être en une seule ligne:
SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()
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
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 )
Vous pouvez aussi l'utiliser facilement
SELECT *
FROM inventory
WHERE YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
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
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 * /
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)
SELECT id FROM tb1
WHERE
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week )