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

व्यावसायिक घंटों के भीतर समय का अंतर

मेरा सुझाव है कि created_at . के बीच व्यावसायिक घंटों की सभी श्रेणियां जेनरेट करें और current_timestamp और उनका सारांश। हालांकि यह प्रदर्शन के मामले में इष्टतम समाधान से बहुत दूर है, मुझे लगता है कि यह सबसे सीधा-आगे दृष्टिकोण है। मैं टाइम ज़ोन रेंज के साथ टाइमस्टैम्प का उपयोग करता हूं tstzrange चौराहे के साथ ऑपरेटर (*)

SELECT id,
  created_at,
  SUM(upper(business_range) - lower(business_range) ) business_hours
FROM (
  SELECT id, 
    created_at,
    tstzrange(date_in_range + '09:00'::time with time zone, date_in_range + '17:00'::time with time zone) 
      * tstzrange(created_at, current_timestamp) as business_range
  FROM (
    SELECT id,
      created_at,
      created_at::date + generate_series(0, current_timestamp::date - created_at::date) as date_in_range 
    FROM times
  ) dates_in_range
  WHERE date_part('dow', date_in_range) in (1,2,3,4,5)
) business_hour_ranges
GROUP BY
  id,
  created_at

सेटअप और उदाहरण देखें db<>fiddle

सावधानी बरतने के लिए

जबकि कार्यान्वयन को समझने और डीबग करने में आसान बनाया गया था, इसके परिणामस्वरूप खराब प्रदर्शन हो सकता है - खासकर अगर बहुत पुरानी बनाई गई तारीखों के साथ उपयोग किया जाता है। यदि आपके सिस्टम में ऐसा हो सकता है, तो आप बेहतर लेखन कार्य कर सकते हैं जो create_at और current_date के सप्ताह के दिन की जांच करता है, उनके बीच दिनों की संख्या ढूंढता है और काम के घंटे निर्धारित करता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्वेरी पर JOOQ टाइमस्टैम्प परिशुद्धता

  2. मेरे पास COUNT('e.id') या COUNT(e.id) के लिए क्वेरी से भिन्न परिणाम हैं

  3. PostgreSQL में किसी दिनांक में दिन जोड़ें

  4. SQLite काम करता है, लेकिन PostgreSQL माइग्रेट डेटाबेस ERROR का कारण बनता है - Django 3.0

  5. मैं PostgreSQL पर चीनी में पूर्ण पाठ खोज कैसे कार्यान्वित करूं?