it-swarm.com.de

MySQL-Abfrage zur Auswahl von Daten der letzten Woche?

Hallo, ich habe eine Tabelle mit einem Datumsfeld und einigen anderen Informationen ... Ich möchte alle Einträge der letzten Woche auswählen (Wochenstart ab Sonntag).

tabellenwerte:

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

Ich möchte alle IDs der letzten Woche auswählen, erwartete Ausgabe ist 5, 6, 8 . (ID 2 nicht in der letzten Woche und ID 15 ist in der aktuellen Woche.)

Wie schreibe ich und SQL-Abfrage für das gleiche.

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)

Ich verwende die YEARWEEK-Funktion speziell, um zur vorherigen Kalenderwoche zurückzukehren (im Gegensatz zu 7 Tagen vor heute). YEARWEEK erlaubt auch ein zweites Argument, das den Beginn der Woche festlegt oder bestimmt, wie die erste/letzte Woche des Jahres behandelt wird. Mit YEARWEEK können Sie die Anzahl der Wochen, die in einer einzigen Variablen vor-/zurückgehen, beibehalten und nicht die gleiche Wochennummer aus früheren/künftigen Jahren angeben. Diese Zahl ist weitaus geringer als bei den meisten anderen Antworten.

13
timecrust

Vereinfachte Form:

Daten der letzten Woche: 

SELECT id FROM tbl


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

Vor 2 Wochen Daten: 

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

Sie können Ihre Berechnung in PHP vornehmen und dann Ihrer Abfrage hinzufügen:

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

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

jetzt wird das Datum vor einer Woche angegeben

7
Ibu

Der einfachste Weg wäre wahrscheinlich:

SELECT id
FROM table
WHERE date >= current_date - 7

Für 8 Tage (d. H. Montag - Montag)

3
useless

Ein einfacher Weg kann dieser sein, dies ist ein echtes Beispiel aus meinem Code und funktioniert perfekt:

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

Sie müssen berechnen, welcher Tag im Vergleich zu heute Sonntag in Ihrer Middleware ist (PHP, Python usw.). *

Dann,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • es kann auch eine Möglichkeit sein, das Datum für Sonntag in MySQL zu ermitteln. Das wäre wohl die sauberere Lösung, wenn sie nicht zu teuer wäre
2
virtualeyes

Es kann sich in einer einzigen Zeile befinden: 

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

BITTE Leute ... 'Letzte Woche', wie das OP gefragt hat und wo ich gesucht habe (aber keine Antwort gefunden hat, die befriedigend ist), ist DIE LETZTE WOCHE. 

Wenn heute Dienstag ist, dann LAST WOCHE ist Montag A WEEK AGO bis Sonntag A WEEK AGO .

So:

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

Oder für ISO-Wochen:

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

Die obige Abfrage funktioniert nicht .. Nach der where-Klausel kann der Spaltenwert nicht CAST verwendet werden. Sie sollten cast den Spaltenwert angeben. 

z.B.:

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

Sie können es auch einfach verwenden

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

ich benutze dies für die Woche ab SONNTAG:

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

Ich mache oft auch eine kurze "letzte Woche" -Prüfung und die folgende Funktion funktioniert gut für mich und schließt heute ein.

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 

Wenn Sie möchten, dass dies heute NICHT enthalten ist, ziehen Sie einfach einen zusätzlichen Tag vom @EndDate ab. Wenn ich diese beiden Variablen heute auswähle, bekomme ich 

@StartDate 2015-11-16 16: 34: 05.347/* Letzter Montag * /

@EndDate 2015-11-23 16: 34: 05.347/* an diesem Montag * /

Wenn ich Sonntag bis Sonntag wollte, hätte ich Folgendes.

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

@StartDate 2015-11-15 16: 34: 05.347/* Vorheriger Sonntag * /

@EndDate 2015-11-22 16: 34: 05.347/* Letzter Sonntag * /

0
Izulien

Für mehr Beispiel wie letzter Monat, letztes Jahr, letzte 15 Tage, letzte 3 Monate

Letzten WOCHENSATZ holen

Verwenden Sie die folgende MySQL-Abfrage, um die Datensätze der letzten Woche aus der mysql-Datenbanktabelle abzurufen.

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