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

तिथियों की एक श्रृंखला के लिए निकटतम रिकॉर्ड

LEFT JOIN . के साथ सबसे सरल और तेज़ होना चाहिए और DISTINCT ON :

WITH x(search_ts) AS (
    VALUES
     ('2012-07-26 20:31:29'::timestamp)              -- search timestamps
    ,('2012-05-14 19:38:21')
    ,('2012-05-13 22:24:10')
    )
SELECT DISTINCT ON (x.search_ts)
       x.search_ts, r.id, r.resulttime
FROM   x
LEFT   JOIN results r ON r.resulttime <= x.search_ts -- smaller or same
-- WHERE some_id = 15                                -- some condition?
ORDER  BY x.search_ts, r.resulttime DESC;

परिणाम (डमी मान):

search_ts           | id     | resulttime
--------------------+--------+----------------
2012-05-13 22:24:10 | 404643 | 2012-05-13 22:24:10
2012-05-14 19:38:21 | 404643 | 2012-05-13 22:24:10
2012-07-26 20:31:29 | 219822 | 2012-07-25 19:47:44

मैं एक CTE का उपयोग करता हूं मान प्रदान करने के लिए, एक टेबल या फ़ंक्शन या अननेस्टेड सरणी या generate_series() कुछ और भी। (क्या आपका मतलब generate_series() था द्वारा "generate_sequence ()"?)

पहले मैं JOIN पहले या बराबर resulttime . के साथ तालिका में सभी पंक्तियों के लिए खोज टाइमस्टैम्प . मैं LEFT JOIN का उपयोग करता हूं इसके बजाय JOIN ताकि जब कोई पूर्व resulttime न हो, तो खोज टाइमस्टैम्प को गिराया नहीं जाता है तालिका में बिल्कुल।

DISTINCT ON (x.search_ts) . के साथ ORDER BY x.search_ts, r.resulttime DESC के संयोजन में हमें सबसे बड़ा (या समान रूप से महानतम में से एक) मिलता है resulttime जो प्रत्येक खोज टाइमस्टैम्प से छोटा या उसके बराबर होता है।



  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. कैसे IsFinite () PostgreSQL में काम करता है

  3. बाहरी संपादक के साथ कमांड लाइन पर पोस्टग्रेज नहीं चल रहा है क्वेरी

  4. PostgreSQL - एक विश्वसनीय कतार लागू करना

  5. PostGIS में बफ़र्स (सर्कल)