Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chọn tối thiểu. ba giá trị của một bản ghi trong một bảng khác với một JOIN

Nếu vẫn yêu cầu về tổng hợp 3 giá trong một chuỗi, thì hãy sử dụng ROW_NUMBER() sẽ cho phép đưa ra các số này 1, 2, 3 và từ đó có thể sử dụng đơn giản case expressions với nhóm group by :

với 3 mức giá thấp nhất:

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

cho 3 mức giá gần đây nhất

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. lợi thế của việc sử dụng một trình kích hoạt để điền khóa thay thế trong oracle plsql

  2. câu lệnh chạy in sqlplus

  3. Sự cố với các biến liên kết của Oracle không sử dụng chỉ mục đúng cách

  4. Thực thi ngay lập tức biến ràng buộc người dùng thay thế

  5. Cố gắng tải các thư viện máy khách Oracle đã ném BadImageFormatException