मेरे पास एक टेबल है, मैं एक पिछला रिकॉर्ड प्रदर्शित करना चाहता हूं

select id_1 
       , lag(kd_1) over(order by kd_1) as ID_PREV
       , kd_1
       , dt_change
       , id_usr 
from t1.status_hist 
where kd_sys_1 = 6
order by id_sys_1 


1   19  19  2020-12-01 14:35:40 id_usr
1   18  18  2020-12-01 14:35:49 id_usr
2   19  19  2020-12-01 14:35:50 id_usr
3   18  18  2020-12-01 14:38:14 id_usr
3   19  19  2020-12-01 14:37:27 id_usr
4   19  19  2020-12-01 14:37:54 id_usr
4       18  2020-12-01 14:38:14 id_usr

लेकिन मुझे सिर्फ एक एंट्री चाहिए और क्या होगा कुछ इस तरह

1   18  19  2020-12-01 14:35:40 id_usr
2   19  19  2020-12-01 14:35:50 id_usr
3   18  19  2020-12-01 14:37:27 id_usr

केवल पिछली प्रविष्टि

2
Dmitriy_pechatnik 7 पद 2020, 15:48

1 उत्तर

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

पोस्टग्रेज में, आप distinct on का प्रयोग करेंगे:

select distinct on (id_1) sh.*
from t1.status_hist sh
where kd_sys_1 = 6
order by id_1, dt_change desc;

उपरोक्त पिछली प्रविष्टि वापस नहीं करता है। मैंने प्रश्न के उस भाग को नवीनतम प्रविष्टि प्राप्त करने के प्रयास के रूप में व्याख्यायित किया। यदि आप वास्तव में परिणाम सेट में चाहते हैं, तो बस एक सबक्वायरी का उपयोग करें:

select distinct on (id_1) sh.*,
       lag(kd_1) over (order by kd_1) as id_prev
from (select sh.*
      from t1.status_hist sh
      where kd_sys_1 = 6
     ) sh
order by id_1, dt_change desc;
1
Gordon Linoff 7 पद 2020, 13:06