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

nhóm các khoảng thời gian liên tiếp theo sql

Bạn có thể sử dụng các biến tốt trong PL / pgSQL.

Tôi sẽ giải quyết vấn đề này bằng một hàm bảng.

Giả sử bảng được gọi là stock , mã của tôi sẽ giống như sau:

CREATE OR REPLACE FUNCTION combine_periods() RETURNS SETOF stock
   LANGUAGE plpgsql STABLE AS
$$DECLARE
   s stock;
   period stock;
BEGIN
   FOR s IN
      SELECT stock_name, action, start_date, end_date
      FROM stock
      ORDER BY stock_name, action, start_date
   LOOP
      /* is this a new period? */
      IF period IS NOT NULL AND
         (period.stock_name <> s.stock_name
            OR period.action <> s.action
            OR period.end_date <> s.start_date)
      THEN
         /* new period, output last period */
         RETURN NEXT period;
         period := NULL;
      ELSE
         IF period IS NOT NULL
         THEN
            /* period continues, update end_date */
            period.end_date := s.end_date;
         END IF;
      END IF;

      /* remember the beginning of a new period */
      IF period IS NULL
      THEN
         period := s;
      END IF;
   END LOOP;

   /* output the last period */
   IF period IS NOT NULL
   THEN
      RETURN NEXT period;
   END IF;

   RETURN;
END;$$;

Và tôi sẽ gọi nó như thế này:

test=> SELECT * FROM combine_periods();
┌────────────┬─────────┬────────────┬──────────┐
│ stock_name │ action  │ start_date │ end_date │
├────────────┼─────────┼────────────┼──────────┤
│ google     │ falling │          3 │        4 │
│ google     │ growing │          1 │        3 │
│ google     │ growing │          4 │        5 │
│ yahoo      │ growing │          1 │        2 │
└────────────┴─────────┴────────────┴──────────┘
(4 rows)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các hàng có phạm vi ngày hoãn lại và tích lũy thời lượng của chúng

  2. Cùng một con maven với các hành vi khác nhau

  3. Chuyển đổi cột bytea thành OID trong khi vẫn giữ nguyên các giá trị

  4. Gây ra bởi:org.postgresql.util.PSQLException:FATAL:các khe kết nối còn lại được dành riêng cho các kết nối siêu người dùng không sao chép

  5. Mẫu &Công cụ sửa đổi mẫu cho Định dạng số trong PostgreSQL