मेरे पास एक ऐसी स्थिति है जो मुझे लगता है कि विंडो फ़ंक्शन का उपयोग करके हल किया जा सकता है लेकिन मुझे यकीन नहीं है।
निम्न तालिका की कल्पना करें
CREATE TABLE tmp
( date timestamp,
id_type integer
) ;
INSERT INTO tmp
( date, id_type )
VALUES
( '2017-01-10 07:19:21.0', 3 ),
( '2017-01-10 07:19:22.0', 3 ),
( '2017-01-10 07:19:23.1', 3 ),
( '2017-01-10 07:19:24.1', 3 ),
( '2017-01-10 07:19:25.0', 3 ),
( '2017-01-10 07:19:26.0', 5 ),
( '2017-01-10 07:19:27.1', 3 ),
( '2017-01-10 07:19:28.0', 5 ),
( '2017-01-10 07:19:29.0', 5 ),
( '2017-01-10 07:19:30.1', 3 ),
( '2017-01-10 07:19:31.0', 5 ),
( '2017-01-10 07:19:32.0', 3 ),
( '2017-01-10 07:19:33.1', 5 ),
( '2017-01-10 07:19:35.0', 5 ),
( '2017-01-10 07:19:36.1', 5 ),
( '2017-01-10 07:19:37.1', 5 )
;
मैं कॉलम id_type पर प्रत्येक परिवर्तन पर एक नया समूह रखना चाहूंगा। ईजी 1 समूह 7:19:21 से 7:19:25 तक, दूसरा शुरू और परिष्करण 7:19:26, और इसी तरह।
यह काम करने के बाद, मैं समूहों को परिभाषित करने के लिए और अधिक मापदंड शामिल करना चाहता हूं।
इस समय, नीचे दिए गए प्रश्न का उपयोग करके ...
SELECT distinct
min(min(date)) over w as begin,
max(max(date)) over w as end,
id_type
from tmp
GROUP BY id_type
WINDOW w as (PARTITION BY id_type)
order by begin;
मुझे निम्नलिखित परिणाम मिले:
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:37.1 5
जबकि मैं चाहूंगा:
begin end id_type
2017-01-10 07:19:21.0 2017-01-10 07:19:25.0 3
2017-01-10 07:19:26.0 2017-01-10 07:19:26.0 5
2017-01-10 07:19:27.1 2017-01-10 07:19:27.1 3
2017-01-10 07:19:28.0 2017-01-10 07:19:29.0 5
2017-01-10 07:19:30.1 2017-01-10 07:19:30.1 3
2017-01-10 07:19:31.0 2017-01-10 07:19:31.0 5
2017-01-10 07:19:32.0 2017-01-10 07:19:32.0 3
2017-01-10 07:19:33.1 2017-01-10 07:19:37.1 5
जब मैं इस पहले चरण को हल कर लेता हूं, तो मैं समूहों को तोड़ने के लिए नियमों के रूप में उपयोग करने के लिए और कॉलम जोड़ूंगा, और ये अन्य अशक्त होंगे।
Postgres Version: 8.4 (हमारे पास Postgis के साथ Postgres हैं, इसलिए इसे अपग्रेड करना आसान नहीं है। Postgis फ़ंक्शंस में नाम बदल जाते हैं और अन्य समस्याएं हैं, लेकिन उम्मीद है कि हम पहले से ही सब कुछ लिख रहे हैं और नया संस्करण एक नए वर्जन X का उपयोग करेगा) पोस्टगिस 2.x)