Geçen haftadan veri seçmek için MySQL Sorgusu?


98

Merhaba, bir tarih alanı ve başka bilgiler içeren bir tablom var. Geçen haftadaki tüm girişleri seçmek istiyorum (hafta başlangıcı Pazar).

tablo değerleri:

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

Geçen haftadaki tüm kimlikleri seçmek istiyorum, beklenen çıktı 5, 6, 8. (kimlik 2 geçen hafta değil ve kimlik 15 geçerli hafta içinde.)

Nasıl yazılır ve aynı SQL Sorgusu.


Yani açıklığa kavuşturmak için, pazar gününden beri 7 günlük veri olması gerekmiyor mu? Yani bugün Pazartesi ise 2 günlük veri (Pazar ve Pazartesi) alacaksınız?
— Brendan Long

Pazar-Cumartesi. Son 7 gün değil
— coderex

Şu anda bunu gerçekten SQL'e dönüştürmek istemiyorum, ancak Wikipedia'da haftanın gününü belirlemek için bir algoritma bulabilir ve daha sonra ne kadar geriye bakacağınıza karar vermek için bunu kullanabilirsiniz: en.wikipedia.org/wiki/ …
— Brendan Long

@Brendan Long: SELECT id FROM tbl WHERE WEEK(date, 0) = WEEK(NOW(), 0) - 1Haftalarca kullanabilirdi ama sanırım hedefi gerçek takvim haftaları değil . En azından ISO-8601 gibi bir şeyden veya yılın dönüşünün dikkate alınmasını isteyip istemediğinden bahsetmedi.
— Jürgen Thelen

Benim için cevapWHERE table.column >= DATE(NOW()) - INTERVAL 7 DAY
— Connor Leech

Yanıtlar:


126
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY

1
Merhaba, Geçen hafta Pazartesi'den Pazar'a tanımlanmış bir başlangıç ​​ile nasıl alınır
— Xman Classical

5
@Graph Evet, yukarıdaki SQL betiği şu şekilde olacaktır: SELECT id from tbl WHERE DATE> DATE_SUB (DATE (NOW ()), INTERVAL DAYOFWEEK (NOW ()) + 6 DAY) AND DATE <= DATE_SUB (DATE (NOW (ŞİMDİ) ( )), ARALIK GÜNÜHAFTA (ŞİMDİ ()) - 1 GÜN)
— Xman Klasik

7
geçen hafta yerine son 7 günü döndürür
— kazuar

134
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();

1
Bunu '2011-05-22'de çalıştırırsanız, bu OP sorusunu çözmez id 15...
— Cesar

2
Bu en iyi cevap.
— Jad Chahine

23
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

YEARWEEK işlevini özellikle önceki tüm takvim haftasına geri dönmek için kullanıyorum (bugünden önceki 7 gün yerine). YEARWEEK ayrıca haftanın başlangıcını belirleyecek veya yılın ilk / son haftasının nasıl işleneceğini belirleyecek ikinci bir argümana izin verir. YEARWEEK, tek bir değişkende geri / ileri gitmek için hafta sayısını tutmanıza izin verir ve önceki / gelecek yıllardan aynı hafta numarasını içermez ve buradaki diğer cevapların çoğundan çok daha kısadır.


2
Söyleyebileceğim kadarıyla, OP'lerin sorusunu doğru cevaplayan tek cevap bu. Soru, önceki haftadan kayıtların nasıl alınacağıydı . Buradaki cevapların çoğu aslında yanlış.
— squarewav

Haftanın başlangıç ​​gününü de belirtmek istiyorsanız, 2. bağımsız değişkeni YEARWEEK () için sağlayın: WHERE YEARWEEK(dateColumnFromTbl, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
— stamster

Bugünün tarihini de eklemek istersem ... geçen haftaya ... bu nasıldı?
— gumuruh

13

Basitleştirilmiş form:

Geçen hafta verileri:

SELECT id FROM tbl


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

2 hafta önce veriler:

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


Yılın ilk haftasında neler oluyor?
— Christian Goetze

1
Soru, geçen haftanın verilerini seçmekti? Yılın ilk haftasıysa ve geçen haftanın verilerini seçmek istiyorsanız, sorgu önceki yılın son haftasını döndürür.
— Anam

4
O zaman YEAR (tarih) = YEAR (geçerli_tarih) ile kafam karıştı. Bu bir önceki yılı nasıl seçebilir?
— Christian Goetze

8

Hesaplamanızı php olarak yapabilir ve ardından sorgunuza ekleyebilirsiniz:

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

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

şimdi bu bir hafta öncesinin tarihini verecek


5

Muhtemelen en basit yol şudur:

SELECT id
FROM table
WHERE date >= current_date - 7

8 gün boyunca (yani Pazartesi - Pazartesi)


4

LÜTFEN insanlar ... OP'nin sorduğu ve aradığım yer (ancak cevapların hiçbirini tatmin edici bulamadığım) gibi 'Geçen hafta' SON HAFTA.

Bugün Salı ise, SON HAFTA Pazartesi A HAFTA ÖNCE ile Pazar arası BİR HAFTA ÖNCE'dir .

Yani:

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

Veya ISO haftaları için:

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

2

Ara yazılımınızda (php, python, vb.), Bugüne göre hangi günün Pazar olduğunu hesaplamanız gerekir *

Sonra,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • MySQL'de de bugün ile pazarın tarihini almanın bir yolu olabilir; Bu, gerçekleştirmek için çok pahalı olmasa da tartışmasız daha temiz bir çözüm olacaktır.

2

Tek satırda olabilir:

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

2

Basit bir yol bu olabilir, bu benim kodumdan gerçek bir örnek ve mükemmel çalışıyor:

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

1

Yukarıdaki sorgu çalışmayacaktır. whereMaddeden sonra CASTsütun değerini alamazsak çalışmayacaktır. castSütun değerini almalısınız .

Örneğin:

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


1

İşte MySQL'de geçen hafta, ay ve yıl kayıtlarını almanın bir yolu.

Geçen hafta

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1;

Geçen ay

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE MONTH(InsertTime) = MONTH(NOW()) - 1;

Geçen yıl

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;

1

Son 7 gün içinde kayıtları geri almak istiyorsanız, aşağıdaki snippet'i kullanabilirsiniz:

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;

0
SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 

1
Lütfen kodunuzun soruyu soran kişinin sorusunu neden yanıtladığını açıklayın.
— Josh Burgess

0

Ben de sık sık hızlı bir "geçen hafta" kontrolü yaparım ve aşağıdakiler benim için iyi sonuç verir ve bugünü içerir.

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 

Bunun bugün dahil OLMAMASINI istiyorsanız, @EndDate'ten fazladan bir gün çıkarın. Bugün bu iki değişkeni seçersem

@StartDate 2015-11-16 16: 34: 05.347 / * Geçen Pazartesi * /

@EndDate 2015-11-23 16: 34: 05.347 / * Bu Pazartesi * /

Pazar gününden Pazar gününe kadar isteseydim aşağıdakilere sahip olurdum.

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

@StartDate 2015-11-15 16: 34: 05.347 / * Önceki Pazar * /

@EndDate 2015-11-22 16: 34: 05.347 / * Geçen Pazar * /



0

Ayrıca esay şekilde de kullanabilirsiniz

SELECT *
FROM   inventory
WHERE  YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1)

0

i Bunu PAZAR'dan itibaren başlayan hafta için kullanın:

SELECT id FROM tbl
WHERE
date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY  
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY

-1

Bunu dene:

Declare @Daytype varchar(15),
        @StartDate datetime,
        @EndDate datetime
set @Daytype = datename(dw, getdate())

if @Daytype= 'Monday' 
    begin
        set @StartDate = getdate()-7 
        set @EndDate = getdate()-1

    end


else if @Daytype = 'Tuesday'

    begin
        set @StartDate = getdate()-8 
        set @EndDate = getdate()-2

    end
Else if @Daytype = 'Wednesday'
    begin
        set @StartDate = getdate()-9
        set @EndDate = getdate()-3
    end
Else if @Daytype = 'Thursday'
    begin
        set @StartDate = getdate()-10 
        set @EndDate = getdate()-4
    end

Else if @Daytype = 'Friday'

    begin
        set @StartDate = getdate()-11
        set @EndDate = getdate()-5

    end

Else if @Daytype = 'Saturday'

    begin
        set @StartDate = getdate()-12
        set @EndDate = getdate()-6

    end

Else if @Daytype = 'Sunday'

    begin
        set @StartDate = getdate()-13
        set @EndDate = getdate()-7

    end

 select @StartDate,@EndDate

-5

Tarihleri ​​zaten biliyorsanız, aşağıdaki gibi basitçe kullanabilirsiniz:

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.