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.


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

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();

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.


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


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


5

Mungkin cara paling sederhana adalah:

SELECT id
FROM table
WHERE date >= current_date - 7

Selama 8 hari (yaitu Senin - Senin)


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

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

2

Bisa dalam satu baris:

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

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)")

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 )

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

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 * /



0

Anda juga bisa menggunakannya dengan cara lain

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

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


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;

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;

-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

-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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.