Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wybierz min. trzy wartości rekordu w innej tabeli z JOIN

Jeśli wymaganie pozostaje dla osi obrotu 3 cen w serii, użyj ROW_NUMBER() umożliwi podanie tych liczb 1, 2, 3 i stąd jest proste użycie case expressions z group by :

za 3 najniższe ceny:

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

za 3 ostatnie ceny

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

Demo 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. Dlaczego nie zachłanny kwantyfikator czasami nie działa w wyrażeniu regularnym Oracle?

  2. odczytywanie wielu wartości z pola PL/SQL BLOB

  3. jak przekonwertować ciąg daty na format daty w oracle10g

  4. Oracle.ManagedDataAccess to AWS RDS DB — TCPS:nieprawidłowy portfel SSL (magic)

  5. NOT IN zapytanie... dziwne wyniki