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

Generate_series in Postgres từ ngày bắt đầu và ngày kết thúc trong một bảng

Bạn không cần CTE cho việc này, điều đó sẽ đắt hơn mức cần thiết.
Và bạn không cần truyền tới timestamp , kết quả đã của kiểu dữ liệu timestamp khi bạn cấp timestamp nhập vào generate_series() . Thông tin chi tiết tại đây:

  • Tạo chuỗi thời gian giữa hai ngày trong PostgreSQL

Trong Postgres 9.3 hoặc sau này, bạn có thể sử dụng LATERAL tham gia:

SELECT to_char(ts, 'YYYY-MM-DD HH24') AS formatted_ts
FROM  (
   SELECT min(start_timestamp) as first_date
        , max(start_timestamp) as last_date
   FROM   header_table
   ) h
  , generate_series(h.first_date, h.last_date, interval '1 hour') g(ts);

Tùy chọn với to_char() để nhận được kết quả là văn bản ở định dạng bạn đã đề cập.

Điều này hoạt động trong bất kỳ Phiên bản Postgres:

SELECT generate_series(min(start_timestamp)
                     , max(start_timestamp)
                     , interval '1 hour') AS ts
FROM   header_table;

Thường nhanh hơn một chút.
Gọi các hàm set-return trong SELECT danh sách là một tính năng SQL không chuẩn và bị một số người khó chịu. Ngoài ra, có những hành vi kỳ quặc (mặc dù không phải đối với trường hợp đơn giản này) cuối cùng đã được khắc phục trong Postgres 10. Xem:

  • Hành vi mong đợi cho nhiều hàm trả về trong mệnh đề SELECT là gì?

Lưu ý một sự khác biệt nhỏ trong NULL xử lý:

Tương đương với

max(start_timestamp)

được lấy bằng

ORDER BY start_timestamp DESC NULLS LAST
LIMIT 1

Không có NULLS LAST Giá trị NULL đến đầu tiên theo thứ tự giảm dần (nếu có có thể là giá trị NULL trong start_timestamp ). Bạn sẽ nhận được NULL cho last_date và truy vấn của bạn sẽ trống.

Chi tiết:

  • Tại sao các giá trị NULL lại xuất hiện đầu tiên khi đặt hàng DESC trong một truy vấn PostgreSQL?


  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ược đồ PostgreSQL / Không gian tên với Django

  2. Java JDBC bỏ qua setFetchSize?

  3. Postgresql không tạo db với “createb” làm siêu người dùng, chưa xuất lỗi

  4. BẢNG MÔ TẢ PostgreSQL Tương đương

  5. Cách sao chép dữ liệu PostgreSQL sang các trang web từ xa