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

समय श्रृंखला में अंतराल का पता लगाएं और हटाएं

मैं केवल एक प्रश्न बनाऊंगा:

DELETE FROM mytable 
WHERE company in (
  SELECT Company 
  FROM (
    SELECT Company, 
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company ORDER BY id 
               ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company)
      / 
      COUNT(*) 
         OVER (PARTITION BY company) As p50
  ) alias
  WHERE cnt >= 3 OR p50 > 0.5
)

(कंपनी + मान) कॉलम पर एक समग्र अनुक्रमणिका इस क्वेरी की अधिकतम गति प्राप्त करने में मदद कर सकती है।

संपादित करें

उपरोक्त क्वेरी काम नहीं करती है
मैंने इसे थोड़ा ठीक किया है, यहां एक डेमो है:http://sqlfiddle.com/#!15/c9bfe/7
दो चीजें बदली गई हैं:
- कंपनी द्वारा विभाजन तारीख के अनुसार आदेश आईडी द्वारा ऑर्डर करें . के बजाय
- स्पष्ट रूप से सांख्यिक (क्योंकि पूर्णांक को 0 से छोटा कर दिया गया है):
ओवर (कंपनी द्वारा विभाजन)::संख्यात्मक

  SELECT company, cnt, p50
  FROM (
    SELECT company, 
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company ORDER BY date 
               ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
      SUM(CASE WHEN value IS NULL THEN 1 ELSE 0 END) 
         OVER (PARTITION BY company)::numeric
      / 
      COUNT(*) 
         OVER (PARTITION BY company) As p50
    FROM mytable
  ) alias
--  WHERE cnt >= 3 OR p50 > 0.5 

और अब डिलीट क्वेरी काम करेगी:

DELETE FROM mytable 
WHERE company in (
      SELECT company
      FROM (
        SELECT company, 
          COUNT(CASE WHEN value IS NULL THEN 1 END) 
             OVER (PARTITION BY company ORDER BY date 
                   ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
          SUM(CASE WHEN value IS NULL THEN 1 ELSE 0 END) 
             OVER (PARTITION BY company)::numeric
          / 
          COUNT(*) 
             OVER (PARTITION BY company) As p50
        FROM mytable
      ) alias
    WHERE cnt >= 3 OR p50 > 0.5
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या कोई समझा सकता है कि पोस्टग्रेस्क्ल-क्लाइंट क्या है और यह पोस्टग्रेस्क्ल कोर पैकेज के साथ कैसे इंटरैक्ट करता है?

  2. PostgreSQL केस असंवेदनशील सरणी पर चयन करें

  3. Laravel 5 सिंगल रो लिमिट को अपडेट करने से काम नहीं चलता

  4. इंसर्ट क्यों काम नहीं कर रहा है और पोस्ट्रेस्क्ल पर कोई त्रुटि आउटपुट नहीं कर रहा है?

  5. पोस्टग्रेज में कॉपी कमांड का उपयोग करने में त्रुटि (त्रुटि:टाइप तिथि के लिए अमान्य इनपुट सिंटैक्स:)