पिछले सप्ताह से डेटा का चयन करने के लिए MySQL क्वेरी?


96

नमस्ते, मेरे पास एक दिनांक क्षेत्र और कुछ अन्य जानकारी के साथ एक तालिका है। मैं पिछले सप्ताह (रविवार से सप्ताह शुरू) से सभी प्रविष्टियों का चयन करना चाहता हूं।

तालिका मान:

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

मैं पिछले सप्ताह से सभी आईडी का चयन करना चाहता हूं, अपेक्षित उत्पादन 5, 6, 8. है (आईडी 2 पिछले सप्ताह में नहीं है, और आईडी 15 चालू सप्ताह में है।)

कैसे लिखें और उसी के लिए SQL क्वेरी।


तो बस स्पष्ट करने के लिए, आप रविवार से डेटा चाहते हैं, जरूरी नहीं कि 7 दिन का डेटा हो? तो अगर आज सोमवार है तो आपको 2 दिन का डेटा (रविवार और सोमवार) मिलेगा?
ब्रेंडन लॉन्ग

रविवार से शनिवार। पिछले 7 दिनों से नहीं
कोडेरेक्स

मुझे ऐसा नहीं लग रहा है कि वास्तव में इसे अभी SQL में परिवर्तित किया जा रहा है, लेकिन आप विकिपीडिया पर सप्ताह के दिन का निर्धारण करने के लिए एक एल्गोरिथ्म पा सकते हैं, और फिर इसका उपयोग यह तय करने के लिए कर सकते हैं कि कितनी दूर दिखना है: en.wikipedia.org/wiki/ …
ब्रेंडन लंबे समय तक

@Brendan लांग: वह इस्तेमाल कर सकते हैं SELECT id FROM tbl WHERE WEEK(date, 0) = WEEK(NOW(), 0) - 1सप्ताह के लिए है, लेकिन मुझे लगता है कि अपने लक्ष्य है नहीं वास्तविक कैलेंडर सप्ताह। कम से कम उसने ISO-8601 की तरह s / t का उल्लेख नहीं किया है, या वह वर्ष के मोड़ को ध्यान में रखना चाहता है या नहीं।
जर्गेन थेलेन

मेरे लिए जवाब हैWHERE table.column >= DATE(NOW()) - INTERVAL 7 DAY
कॉनर लीच

जवाबों:


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

1
नमस्ते, सोमवार से रविवार तक सप्ताह परिभाषित शुरुआत के साथ अंतिम सप्ताह कैसे प्राप्त करें
Xman शास्त्रीय

5
@Graph हाँ, ऊपर दी गई एसक्यूएल लिपि इस तरह होगी: से सेलेक्ट आईडी फ्रॉम टीब्ल हियर DATE> DATE_SUB (DATE (अब ()), INTERVAL DAYOFWEEK (अब ()) + 6 DAY और DATE <= DATE_SUB) (DATE_SUB) )), इंटरवल डायफॉफेक (अब ()) - १ डीएवाई)
एक्समैन क्लासिकल

7
यह पिछले सप्ताह के बजाय पिछले 7 दिनों में लौटता है
kazuar

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

1
यह ओपी प्रश्न को हल नहीं करता है अगर आप इसे '2011-05-22' पर चलाएंगे तो आपको मिलेगा id 15...
सीजर

2
यह सबसे अच्छा जवाब है।
Jad Chahine

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

मैं विशेष रूप से पूर्व पूरे कैलेंडर सप्ताह (आज से 7 दिन पहले के विपरीत) पर वापस जाने के लिए विशेष रूप से YEARWEEK फ़ंक्शन का उपयोग करता हूं। YEARWEEK एक दूसरे तर्क की भी अनुमति देता है जो सप्ताह की शुरुआत निर्धारित करेगा या यह निर्धारित करेगा कि वर्ष का पहला / अंतिम सप्ताह कैसे संभाला जाता है। YEARWEEK आपको एक ही चर में वापस / आगे जाने के लिए हफ्तों की संख्या रखने की अनुमति देता है, और पूर्व / भविष्य के वर्षों से एक ही सप्ताह की संख्या को शामिल नहीं करेगा, और यह यहाँ पर अन्य उत्तरों की तुलना में बहुत कम है।


2
पास जैसा कि मैं बता सकता हूं, यह एकमात्र उत्तर है जो वास्तव में ओपी प्रश्न का सही उत्तर देता है। सवाल था कि पिछले सप्ताह से रिकॉर्ड कैसे प्राप्त किया जाए । यहाँ कई उत्तर वास्तव में गलत हैं।
squarewav

यदि आप सप्ताह के शुरुआती दिनों को भी निर्दिष्ट करना चाहते हैं, तो YEARWEEK को द्वितीय तर्क की आपूर्ति करें (): WHERE YEARWEEK(dateColumnFromTbl, 1) = YEARWEEK(CURDATE() - INTERVAL 1 WEEK, 1)
stamster

13

सरलीकृत रूप:

पिछले सप्ताह के आंकड़े:

SELECT id FROM tbl


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

2 सप्ताह पहले डेटा:

SELECT id FROM tbl


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

एसक्यूएल फिडल

http://sqlfiddle.com/#!8/6fa6e/2


वर्ष के पहले सप्ताह में क्या होता है?
क्रिश्चियन गोएट्ज़

1
सवाल पिछले सप्ताह से डेटा का चयन करने का था? यदि वर्ष का पहला सप्ताह है, और आप पिछले सप्ताह के डेटा का चयन करना चाहते हैं, तो क्वेरी पिछले वर्ष के अंतिम सप्ताह में वापस आ जाएगी।
आम आदमी

4
मैं अभी YEAR (दिनांक) = YEAR (current_date) से भ्रमित हूं। वह पिछले वर्ष का चयन कैसे कर सकता है?
क्रिश्चियन गोएट्ज़

8

आप अपनी गणना php में कर सकते हैं और फिर इसे अपनी क्वेरी में जोड़ सकते हैं:

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

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

अब यह एक सप्ताह पहले की तारीख देगा


5

संभवतः सबसे सरल तरीका होगा:

SELECT id
FROM table
WHERE date >= current_date - 7

8 दिनों के लिए (यानी सोमवार - सोमवार)


3

कृपया लोगों को ... 'पिछले हफ्ते' की तरह ओपी ने पूछा और मैं कहां से देख रहा था (लेकिन संतोषजनक जवाब नहीं मिला) द लास्ट WEEK है।

अगर आज मंगलवार है, तो LAST WEEK सोमवार ए WEEK AGO टू संडे A WEEK AGO है

इसलिए:

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

या आईएसओ सप्ताह के लिए:

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

2

आपको अपने मिडलवेयर (php, python, इत्यादि) में रविवार के दिन के सापेक्ष रविवार को कैल्क करने की आवश्यकता होगी। * *

फिर,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • MySQL में आज के सापेक्ष रविवार की तारीख पाने का एक तरीका हो सकता है; यकीनन क्लीनर समाधान अगर प्रदर्शन करने के लिए बहुत महंगा नहीं होगा



1

उपरोक्त क्वेरी काम नहीं करेगी। whereक्लॉज के बाद , यदि हम CASTकॉलम का मान नहीं रख सकते हैं , तो यह काम नहीं करेगा। तुम्हे करना चाहिएcast स्तंभ मान ।

उदाहरण के लिए:

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
कृपया बताएं कि आपका कोड प्रश्नकर्ता के प्रश्न का उत्तर क्यों देता है।
जोश बर्गेस

0

मैं अक्सर "पिछले सप्ताह" के रूप में अच्छी तरह से जांच करता हूं और निम्नलिखित मेरे लिए अच्छी तरह से काम करता है और आज भी शामिल है।

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 

यदि आप चाहते हैं कि यह आज शामिल न हो तो सिर्फ @EndDate से एक अतिरिक्त दिन घटाएं। अगर मैं आज इन दो चर का चयन करूं

@StartDate 2015-11-16 16: 34: 05.347 / * अंतिम सोमवार * /

@EndDate 2015-11-23 16: 34: 05.347 / * यह सोमवार * /

अगर मुझे संडे को संडे चाहिए होता तो मैं निम्नलिखित होता।

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

@StartDate 2015-11-15 16: 34: 05.347 / * पिछला रविवार * /

@EndDate 2015-11-22 16: 34: 05.347 / * अंतिम रविवार * /



0

आप इसे esay तरीके से भी इस्तेमाल कर सकते हैं

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

0

मैं SUNDAY से सप्ताह की शुरुआत के लिए इसका उपयोग करता हूं:

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

0

अधिक उदाहरण के लिए पिछले महीने की तरह, पिछले साल, पिछले 15 दिनों की, पिछले 3 महीनों की

पिछले सप्ताह रिकॉर्ड प्राप्त करें

MySQL डेटाबेस तालिका से पिछले सप्ताह के रिकॉर्ड प्राप्त करने के लिए नीचे MySQL क्वेरी का उपयोग करना।

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)

0

यहां MySQL में पिछले सप्ताह, महीने और वर्ष रिकॉर्ड प्राप्त करने का एक तरीका है।

पिछले सप्ताह

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

पिछले महीने

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

पिछले साल

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

0

यदि आप पिछले 7 दिनों के भीतर रिकॉर्ड प्राप्त करना चाहते हैं, तो आप नीचे दिए गए स्निपेट का उपयोग कर सकते हैं:

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

-1

इसे इस्तेमाल करे:

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

यदि आप पहले से ही तारीखों को जानते हैं तो आप इस तरह का उपयोग कर सकते हैं:

SELECT id    
FROM `Mytable`    
where MyDate BETWEEN "2011-05-15" AND "2011-05-21"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.