मैं इस क्वेरी पर काम कर रहा हूं और x घंटे के भीतर डाले गए सभी रिकॉर्ड्स का चयन करने का प्रयास कर रहा हूं

उदाहरण के लिए मेरे पास निम्न रिकॉर्ड है

A      2018-04-11 18:00:00
B      2018-04-11 19:00:00
C      2018-04-11 20:00:00
D      2018-04-11 21:00:00

जब क्वेरी निष्पादित की जाती है, तो समय 21:15:00 होता है, क्वेरी को रिकॉर्ड लेना चाहिए जो क्वेरी के निष्पादित होने से पिछले 2 घंटों के भीतर हुई है। तो इस मामले में इसे वापस करना चाहिए:

21:00:00 और 20:00:00

यह वह प्रश्न है जिस पर मैं काम कर रहा हूं और यह अपेक्षा के अनुरूप काम नहीं कर रहा है, क्योंकि यह केवल 2 रिकॉर्ड दिखाता है, भले ही 2 से अधिक हों।

SELECT *
    FROM posts p1
    WHERE p1.created_at >= '2018-04-11 16:00:00'
    AND exists
    (
        SELECT p2.id
        FROM posts p2
        WHERE p2.created_at <= '2018-04-11 17:00:00'
        AND p2.created_at > p1.created_at
        AND p2.created_at - p1.created_at < INTERVAL '1 HOUR'
        AND p2.category_id = p1.category_id
        AND p2.city_id = p1.city_id
        AND p2.district_id = p1.district_id
        AND p2.subcategory_id = p1.subcategory_id
    )
    AND p1.category_id = 3;

संपादित करें

मेरे प्रश्न के बारे में स्पष्ट नहीं होने के लिए क्षमा करें, उपरोक्त मेरी क्वेरी जटिल क्यों है क्योंकि मैं अपने रिकॉर्ड को "क्लस्टर" करने का प्रयास कर रहा हूं। मूल रूप से मैं उसी श्रेणी के रिकॉर्ड प्राप्त करने का प्रयास कर रहा हूं, जिसे उसी स्थान (उसी शहर आईडी) में पोस्ट किया गया है जिसे विभिन्न उपयोगकर्ताओं द्वारा 2 घंटे की समय सीमा के भीतर पोस्ट किया गया है।

इसलिए जब क्वेरी 21:00 बजे निष्पादित की जाती है, तो उसे उसी स्थान से आने वाले रिकॉर्ड को वापस करना चाहिए, उसी श्रेणी पर पोस्ट किया जाता है, जो एक ही समय में "मोटे तौर पर" पोस्ट किया जाता है। जब मैं "मोटे तौर पर" कहता हूं तो यह मूल रूप से पिछले 2 घंटों के भीतर पोस्ट की गई पोस्ट प्राप्त करने का प्रयास कर रहा है।

0
Jeremy 11 अप्रैल 2018, 14:39

1 उत्तर

सबसे बढ़िया उत्तर

जब क्वेरी निष्पादित की जाती है तो समय 21:15:00 होता है, क्वेरी को रिकॉर्ड लेना चाहिए जो क्वेरी के निष्पादित होने से पिछले 2 घंटों के भीतर हुई है।

आपकी क्वेरी बहुत अधिक जटिल लगती है।

शायद मैं उलझन में हूं कि आप इसका इस्तेमाल क्यों नहीं करेंगे?

select p.*
from posts p
where p.created_at >= current_timestamp - interval '2 hour';

यदि आप अपना खुद का मूल्य डालने जा रहे हैं, तो आपको शायद इसकी आवश्यकता होगी:

select p.*
from posts p
where p.created_at >= '2018-04-11 16:00:00'::timestamp - interval '2 hour' and
      p.created_at < '2018-04-11 16:00:00'::timestamp;

मेरा मानना ​​है कि भविष्य में पद सृजित नहीं किए जा सकते। यदि आप वर्तमान समय में प्लग इन कर रहे हैं तो यह सच नहीं है।

1
Gordon Linoff 11 अप्रैल 2018, 15:49