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

न्यूनतम चुनें। जॉइन के साथ किसी अन्य तालिका में रिकॉर्ड के तीन मान

यदि आवश्यकता एक श्रृंखला में 3 मूल्यों की धुरी के लिए बनी रहती है, तो ROW_NUMBER() का उपयोग करके इन नंबरों को 1, 2, 3 देने में सक्षम होगा और वहां से case expressions . का एक सरल उपयोग होता है group by . के साथ :

3 सबसे कम कीमतों के लिए:

SELECT
      a.article_id
    , MAX(CASE
            WHEN a.price_seq = 1 THEN p.price END) AS price_1
    , MAX(CASE
            WHEN a.price_seq = 2 THEN p.price END) AS price_2
    , MAX(CASE
            WHEN a.price_seq = 3 THEN p.price END) AS price_3
FROM (
            SELECT
                  article_id
                , price_valid_from
                , price_id
                , ROW_NUMBER() OVER (PARTITION BY article_id
                                     ORDER BY p.price ASC) AS price_seq
            FROM article
                  LEFT OUTER JOIN price p
                              ON (a.price_id = p.price_id)
      ) a
GROUP BY
      a.article_id
ORDER BY
      a.article_id

3 सबसे हाल की कीमतों के लिए

SELECT
      a.article_id
    , MAX(CASE
            WHEN a.price_seq = 1 THEN p.price END) AS price_1
    , MAX(CASE
            WHEN a.price_seq = 2 THEN p.price END) AS price_2
    , MAX(CASE
            WHEN a.price_seq = 3 THEN p.price END) AS price_3
FROM (
            SELECT
                  article_id
                , price_valid_from
                , price_id
                , ROW_NUMBER() OVER (PARTITION BY article_id
                                     ORDER BY price_valid_from DESC) AS price_seq
            FROM article
      ) a
      LEFT OUTER JOIN price p
                  ON (a.price_id = p.price_id)
GROUP BY
      (a.article_id)
ORDER BY
      a.article_id

डेमो SQLfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle स्वचालित रूप से मल्टीरिकॉर्ड ब्लॉक भाग 2 में रिकॉर्ड सम्मिलित करता है

  2. ORA-1114 रनिंग डाटापैच

  3. ओआरए-00838

  4. TO_CHAR(संख्या) फ़ंक्शन ORA-01722 लौटाता है:अमान्य संख्या

  5. UTL_FILE स्थानीय मशीन में सहेजा जा रहा है