Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL पिछले 7 दिनों का चयन करें

WHERE क्लॉज गलत है, इसे टेबल रेफरेंस और जॉइन ऑपरेशंस का पालन करना होगा।

कुछ इस तरह:

 FROM tartikel p1 
 JOIN tartikelpict p2 
   ON p1.kArtikel = p2.kArtikel 
  AND p2.nNr = 1
WHERE p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAY
ORDER BY p1.kArtikel DESC

संपादित करें (तीन प्लस साल बाद)

उपरोक्त अनिवार्य रूप से प्रश्न का उत्तर देता है "मैंने अपनी क्वेरी में WHERE क्लॉज जोड़ने का प्रयास किया और अब क्वेरी एक त्रुटि लौटा रही है, मैं इसे कैसे ठीक करूं?"

"पिछले 7 दिनों" की तिथि सीमा की जांच करने वाली शर्त लिखने के बारे में एक प्रश्न के रूप में...

यह वास्तव में विनिर्देश की व्याख्या करने पर निर्भर करता है कि तालिका में कॉलम का डेटाटाइप क्या है (DATE या DATETIME) और कौन सा डेटा उपलब्ध है ... क्या लौटाया जाना चाहिए।

संक्षेप में:सामान्य दृष्टिकोण दिनांक/डेटाटाइम सीमा के लिए "प्रारंभ" और उस सीमा के "समाप्ति" की पहचान करना है, और उन्हें एक क्वेरी में संदर्भित करना है। आइए कुछ आसान पर विचार करें... "कल" ​​के लिए सभी पंक्तियाँ।

अगर हमारा कॉलम DATE टाइप का है। किसी क्वेरी में एक्सप्रेशन शामिल करने से पहले, हम इसे एक साधारण SELECT

. में टेस्ट कर सकते हैं
 SELECT DATE(NOW()) + INTERVAL -1 DAY 

और सत्यापित करें कि लौटाया गया परिणाम वही है जिसकी हम अपेक्षा करते हैं। फिर हम उसी अभिव्यक्ति का उपयोग WHERE क्लॉज में कर सकते हैं, इसकी तुलना DATE कॉलम से इस तरह कर सकते हैं:

 WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY

DATETIME या TIMESTAMP कॉलम के लिए, हम >= . का उपयोग कर सकते हैं और < एक श्रेणी निर्दिष्ट करने के लिए असमानता की तुलना

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

"पिछले 7 दिनों" के लिए हमें यह जानना होगा कि क्या इसका मतलब अभी इस बिंदु से है, 7 दिन पहले ... उदा। पिछले 7*24 घंटे, तुलना में समय घटक सहित, ...

 WHERE datetimecol >= NOW() + INTERVAL -7 DAY
   AND datetimecol <  NOW() + INTERVAL  0 DAY

पिछले सात पूरे दिन, आज को शामिल नहीं करते

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

या पिछले छह पूर्ण दिन प्लस आज तक ...

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
   AND datetimecol <  NOW()       + INTERVAL  0 DAY

मैं एक सेलेक्ट स्टेटमेंट में दाईं ओर के भावों का परीक्षण करने की सलाह देता हूं, हम परीक्षण के लिए नाउ () के स्थान पर एक उपयोगकर्ता द्वारा परिभाषित चर का उपयोग कर सकते हैं, जो अब () रिटर्न से बंधे नहीं हैं, इसलिए हम सप्ताह/महीने में सीमाओं का परीक्षण कर सकते हैं /वर्ष की सीमाएं, और इसी तरह।

SET @clock = '2017-11-17 11:47:47' ;

SELECT DATE(@clock)
     , DATE(@clock) + INTERVAL -7 DAY 
     , @clock + INTERVAL -6 DAY 

एक बार जब हमारे पास ऐसे भाव होते हैं जो हमारे विशेष उपयोग के मामले में "प्रारंभ" और "अंत" के लिए काम करते हैं, तो "पिछले 7 दिनों" से हमारा क्या मतलब है, हम उन अभिव्यक्तियों का उपयोग WHERE खंड में श्रेणी तुलना में कर सकते हैं।

(कुछ डेवलपर DATE_ADD का उपयोग करना पसंद करते हैं और DATE_SUB + INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR के स्थान पर कार्य करता है वाक्य रचना।

और MySQL DATE, DATETIME और TIMESTAMP डेटाटाइप के साथ काम करने के लिए कुछ सुविधाजनक कार्य प्रदान करता है... DATE, LAST_DAY,

कुछ डेवलपर्स अन्य कोड में प्रारंभ और अंत की गणना करना पसंद करते हैं, और SQL क्वेरी में स्ट्रिंग अक्षर की आपूर्ति करते हैं, जैसे कि डेटाबेस को सबमिट की गई क्वेरी

है
  WHERE datetimecol >= '2017-11-10 00:00'
    AND datetimecol <  '2017-11-17 00:00'

और वह तरीका भी काम करता है। (मेरी प्राथमिकता स्पष्ट रूप से उन स्ट्रिंग अक्षर को DATETIME में डालना होगा, या तो CAST, CONVERT या केवल + INTERVAL ट्रिक के साथ...

  WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
    AND datetimecol <  '2017-11-17 00:00' + INTERVAL 0 SECOND

उपरोक्त सभी मानते हैं कि हम "तिथियां" उचित DATE, DATETIME और/या TIMESTAMP डेटाटाइप में संग्रहीत कर रहे हैं, और उन्हें विभिन्न स्वरूपों में स्ट्रिंग के रूप में संग्रहीत नहीं कर रहे हैं उदा। 'dd/mm/yyyy' , m/d/yyyy , जूलियन तिथियां, या छिटपुट रूप से गैर-विहित प्रारूपों में, या युग की शुरुआत के बाद से कई सेकंड के रूप में, इस उत्तर को अधिक लंबा होने की आवश्यकता होगी।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में रो वर्जनिंग

  2. R को MySQL से कैसे कनेक्ट करें या RMySQL पैकेज को कैसे इंस्टाल करें?

  3. MySQL में SET autocommit=1 और START TRANSACTION के बीच अंतर (क्या मैंने कुछ याद किया है?)

  4. MySQL / MariaDB डेटाबेस के ऑटो इंक्रीमेंट वैल्यू को कैसे बदलें

  5. MYSQL एकाधिक तालिका और SUM में शामिल हों का चयन करें