Permintaan MySQL untuk memilih data dari minggu lalu?

96

Hai, saya memiliki tabel dengan kolom tanggal dan beberapa informasi lainnya. Saya ingin memilih semua entri dari minggu lalu, (minggu mulai dari Minggu).

nilai tabel:

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

Saya ingin memilih semua id dari minggu lalu, output yang diharapkan adalah 5, 6, 8. (id 2 tidak di minggu lalu, dan id 15 di minggu ini.)

Bagaimana menulis dan SQL Query untuk hal yang sama.

coderex
sumber
Jadi sekedar untuk memperjelas, Anda menginginkan data sejak minggu, belum tentu data 7 hari? Jadi apakah hari ini Senin Anda akan mendapatkan data 2 hari (Minggu dan Senin)?
Brendan Long
Minggu sampai Sabtu. Tidak berlangsung 7 hari
coderex
Saya tidak ingin benar-benar mengubahnya menjadi SQL sekarang, tetapi Anda dapat menemukan algoritme untuk menentukan hari dalam seminggu di Wikipedia, dan kemudian menggunakannya untuk memutuskan seberapa jauh ke belakang untuk melihat: en.wikipedia.org/wiki/ …
Brendan Long
@ Brendan Long: dia bisa menggunakannya SELECT id FROM tbl WHERE WEEK(date, 0) = WEEK(NOW(), 0) - 1selama berminggu-minggu, tapi kurasa targetnya bukanlah minggu kalender yang sebenarnya. Setidaknya dia tidak menyebutkan s / t seperti ISO-8601, atau apakah dia ingin pergantian tahun dipertimbangkan.
Jürgen Thelen
Bagi saya jawabannya adalahWHERE table.column >= DATE(NOW()) - INTERVAL 7 DAY
Connor Leech

Jawaban:

123
SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
piotrm.dll
sumber
1
Hai, Cara mendapatkan minggu lalu dengan minggu yang ditentukan mulai dari Senin hingga Minggu
Xman Klasik
5
@Graph Ya, Script SQL diatas akan seperti ini: SELECT id FROM tbl WHERE DATE> DATE_SUB (DATE (NOW ()), INTERVAL DAYOFWEEK (NOW ()) + 6 DAY) AND DATE <= DATE_SUB (DATE (NOW ( )), INTERVAL DAYOFWEEK (SEKARANG ()) - 1 HARI)
Xman Klasik
7
itu mengembalikan 7 hari terakhir, bukan minggu lalu
kazuar
134
select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
Vishwanath Dalvi
sumber
1
Ini tidak menyelesaikan pertanyaan OP jika Anda menjalankan ini pada '2011-05-22' Anda akan mendapatkan id 15...
Cesar
2
Ini jawaban terbaik.
Jad Chahine
21
SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)

Saya menggunakan fungsi YEARWEEK secara khusus untuk kembali ke seluruh minggu kalender sebelumnya (berlawanan dengan 7 hari sebelum hari ini). YEARWEEK juga memungkinkan argumen kedua yang akan mengatur awal minggu atau menentukan bagaimana minggu pertama / terakhir dalam setahun ditangani. YEARWEEK memungkinkan Anda menyimpan jumlah minggu mundur / maju dalam satu variabel, dan tidak akan menyertakan angka minggu yang sama dari tahun-tahun sebelumnya / mendatang, dan ini jauh lebih pendek daripada kebanyakan jawaban lain di sini.

timecrust
sumber
2
Sejauh yang saya tahu, ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan OP dengan benar. Pertanyaannya adalah bagaimana mendapatkan catatan dari minggu sebelumnya . Banyak dari jawaban di sini sebenarnya salah.
squarewav
Jika Anda ingin menentukan hari mulai dalam seminggu juga, berikan argumen ke-2 untuk YEARWEEK (): WHERE YEARWEEK(dateColumnFromTbl, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
stamster
13

Bentuk yang disederhanakan:

Data minggu lalu:

SELECT id FROM tbl


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

Data 2 minggu yang lalu:

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

Anam
sumber
Apa yang terjadi pada minggu pertama tahun ini?
Christian Goetze
1
Pertanyaannya adalah memilih data dari minggu lalu? Jika minggu pertama tahun ini, dan Anda ingin memilih data minggu lalu, kueri akan kembali minggu lalu tahun sebelumnya.
Anam
4
Saya hanya bingung dengan YEAR (date) = YEAR (current_date) lalu. Bagaimana bisa memilih tahun sebelumnya?
Christian Goetze
8

Anda dapat melakukan perhitungan di php dan kemudian menambahkannya ke kueri Anda:

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

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

sekarang ini akan memberikan tanggal untuk seminggu yang lalu

Ibu
sumber
5

Mungkin cara paling sederhana adalah:

SELECT id
FROM table
WHERE date >= current_date - 7

Selama 8 hari (yaitu Senin - Senin)

tak berguna
sumber
3

TOLONG orang ... 'Minggu lalu' seperti yang diminta OP dan di mana saya mencari (tetapi tidak menemukan jawaban yang memuaskan) adalah MINGGU TERAKHIR.

Jika hari ini adalah Selasa, maka MINGGU TERAKHIR adalah Senin MINGGU YANG LALU hingga Minggu MINGGU YANG LALU .

Begitu:

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

Atau untuk minggu ISO:

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

Anda harus menghitung hari mana yang relatif terhadap hari ini adalah hari Minggu di middleware Anda (php, python, dll.) *

Kemudian,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • mungkin juga merupakan cara untuk mendapatkan tanggal hari Minggu dibandingkan dengan hari ini di MySQL; itu bisa dibilang solusi yang lebih bersih jika tidak terlalu mahal untuk dilakukan
mata virtual
sumber
2

Bisa dalam satu baris:

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

Cara yang sederhana adalah yang ini, ini adalah contoh nyata dari kode saya dan berfungsi dengan sempurna:

where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)")
Javier Rodriguez Ortiz
sumber
1

Kueri di atas tidak akan berfungsi. Setelah whereklausa, jika kita tidak bisa CASTnilai kolom, maka itu tidak akan berhasil. Anda harus castnilai kolom.

misalnya:

SELECT.....
WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE )
pengguna7821340
sumber
0
SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 
Manoj
sumber
1
Jelaskan mengapa kode Anda menjawab pertanyaan penanya.
Josh Burgess
0

Saya sering melakukan pemeriksaan cepat "minggu lalu" juga dan berikut ini cenderung bekerja dengan baik untuk saya dan termasuk hari ini.

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 

Jika Anda ingin TIDAK menyertakan hari ini, kurangi satu hari ekstra dari @EndDate. Jika saya memilih dua variabel ini sekarang dapatkan

@StartDate 2015-11-16 16: 34: 05.347 / * Senin Terakhir * /

@EndDate 2015-11-23 16: 34: 05.347 / * Senin Ini * /

Jika saya menginginkan hari Minggu hingga Minggu saya akan memiliki yang berikut ini.

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

@StartDate 2015-11-15 16: 34: 05.347 / * Minggu Sebelumnya * /

@EndDate 2015-11-22 16: 34: 05.347 / * Minggu Terakhir * /

Izulien
sumber
0
WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;
Veera Induvasi
sumber
0

Anda juga bisa menggunakannya dengan cara lain

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

Saya Gunakan ini untuk minggu mulai dari MINGGU:

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

Berikut adalah cara untuk mendapatkan record minggu, bulan, dan tahun terakhir di MySQL.

Minggu lalu

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

Bulan lalu

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

TAHUN lalu

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;
M. Hamza Rajput
sumber
0

Jika Anda ingin mengambil catatan dalam 7 hari terakhir, Anda dapat menggunakan cuplikan di bawah ini:

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

Coba ini:

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
Pradeep Samaranayake
sumber
-5

Jika Anda sudah mengetahui tanggalnya maka Anda bisa menggunakan antara, seperti ini:

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"
pengguna765060
sumber