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

PostgreSQL - मानदंड के आधार पर प्रत्येक पंक्ति को मान निर्दिष्ट करें

नोट:

  1. यदि आपका सूत्र वास्तव में एक्सेल में काम करता है, तो आपने तिथियों को सेल में संग्रहीत किया है, समय नहीं।
  2. D, E के लिए , मुझे समझ में नहीं आता, जब पिछली पंक्ति में समान लेबल नहीं है तो यह 'हां' कैसे वापस आना चाहिए
  3. आपको अपनी तालिका में आईडी के साथ कुछ कॉलम जोड़ना होगा (!)। जबकि एक्सेल शीट में पंक्तियों का समान क्रम रखता है (जब तक कि आप इसे स्पष्ट रूप से नहीं बदलते), PostgreSQL नहीं करता है। इस प्रकार, यदि आपके पास वास्तव में कॉलम समय में केवल समय है, तो किसी भी तरह से आप पंक्तियों के समान क्रम को प्राप्त नहीं कर सकते हैं जैसा कि आपकी तालिका में है, जिससे पूरी तरह से गलत परिणाम मिलते हैं।
  4. यदि आप संस्करण 8.4 का उपयोग कर रहे हैं तो आपका लिंक सही है, हालांकि यह बेहतर होगा यदि आप वर्तमान दस्तावेज़ीकरण

डेटा:

drop table if exists tmp.test;

create table tmp.test (id int, ddate date, label varchar, ttime time);

insert into tmp.test values

(1, '2014/6/4','A','12:05:56'),
(2, '2014/6/4','A','23:02:32'),
(3, '2014/6/4','B','8:39:25'),
(4, '2014/6/4','B','12:36:37'),
(5, '2014/6/4','C','12:20:43'),
(6, '2014/6/4','C','12:56:44'),
(7, '2014/6/4','D','20:52:22'),
(8, '2014/6/4','E','22:25:30'),
(9, '2014/6/4','F','12:16:15'),
(10, '2014/6/4','F','12:31:09'),
(11, '2014/6/4','F','7:12:06'),
(12, '2014/6/4','G','7:48:32'),
(13, '2014/6/4','H','17:58:11');

प्रश्न:

select
  id, 
  ddate,
  label,
  ttime,
  case when (lag(ttime) over(partition by label order by id))::interval
        + ttime::interval > interval '24 hours' then 'yes' else 'no' end
  -- ,(lag(ttime) over(partition by label order by ttime))::interval + ttime::interval
from
  tmp.test

व्याख्या:

  1. lag दिए गए विभाजन के लिए फ़ंक्शन को पिछली पंक्ति में मान मिलेगा। हमारे मामले में, विभाजन को लेबल द्वारा परिभाषित किया जाता है।
  2. कास्ट ऑपरेटर :: बदल जाएगा time lag में टाइप करें , ताकि हम समय जोड़ सकें और 24 घंटे से अधिक प्राप्त कर सकें।
  3. हम कुल 24 घंटे के अंतराल की तुलना करते हैं और एक अच्छा लेबल प्रदर्शित करते हैं yes या no

अपडेट करें:

select
  id, 
  ddate,
  label,
  ttime,
  case when lead(label) over(partition by label order by id) is null then 'no' else 'yes' end
from
  tmp.test



  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. django 1.10 . में रैंक की गई खोज के साथ ट्रिग्राम को मिलाएं

  4. एक जेसन फ़ील्ड में कैसे खोजें जिसमें वाक्पटु के साथ वस्तुओं की एक सरणी हो

  5. PostgreSQL दो टाइमस्टैम्प के बीच मध्यबिंदु खोजने के लिए