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

Cách nhóm theo tháng trong PostgreSQL

Vấn đề:

Bạn muốn nhóm các bản ghi theo tháng trong cơ sở dữ liệu PostgreSQL.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên watch với dữ liệu trong các cột id , nameproduction_timestamp .

id tên production_timestamp
1 xem 2019-03-01 11:45:23
2 đồng hồ thông minh 2019-09-15 07:35:13
3 băng thông minh 2019-09-22 17:22:05

Giải pháp:

Bạn có thể sử dụng DATE_TRUNC() chức năng nhóm các bản ghi trong bảng theo tháng.

Đây là truy vấn bạn sẽ viết:

SELECT 
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month,
       COUNT(id) AS count 
FROM watch
GROUP BY DATE_TRUNC('month',production_timestamp);

Đây là kết quả của truy vấn:

production_to_month số lượng
2019-03-01 00:00:00 1
2019-09-01 00:00:00 2

Thảo luận:

Sử dụng DATE_TRUNC() nếu bạn muốn truy xuất ngày hoặc giờ với độ chính xác cụ thể từ cơ sở dữ liệu PostgreSQL. (Trong ví dụ của chúng tôi, chúng tôi đã sử dụng độ chính xác tháng.)

Hàm này có hai đối số. Đầu tiên, chúng tôi có thông số chỉ định phần ngày (trong ví dụ của chúng tôi là 'tháng'). Lưu ý rằng từ chỉ định là một chuỗi và cần được đặt trong dấu ngoặc kép.

Đối số thứ hai là giá trị dấu thời gian; đây có thể là một biểu thức trả về giá trị dấu thời gian hoặc tên của cột dấu thời gian. (Trong ví dụ của chúng tôi, chúng tôi sử dụng cột production_timestamp ).

Hàm DATE_TRUNC() cắt ngắn dấu thời gian đến độ chính xác đã cho (trong trường hợp này là tháng). Trong cơ sở dữ liệu của chúng tôi, đồng hồ thông minh có ngày sản xuất 2019-09-15 07:35:13; sau khi được cắt ngắn thành độ chính xác tháng, nó sẽ trở thành 2019-09-01 00:00:00 . Độ chính xác cấp tháng khiến ngày được hiển thị là '01' và thời gian được điền bằng các số không. (Các phần ngày bị cắt ngắn (ví dụ:ngày, tháng) của dấu thời gian được thay thế bằng các phần.)

Nhóm các bản ghi theo tháng rất phổ biến trong PostgreSQL. Trong ví dụ của chúng tôi, số lượng sản phẩm được tính tổng cho mỗi tháng. (COUNT() hàm tổng hợp đếm số lượng sản phẩm). Nếu bạn nhóm các bản ghi bằng hàm tổng hợp, bạn phải sử dụng mệnh đề GROUP BY. Sau mệnh đề GROUP BY, bạn nên đặt các cột hoặc biểu thức được sử dụng với hàm tổng hợp trong câu lệnh SELECT. (Trong ví dụ của chúng tôi, đây là D ATE_TRUNC( 'month', production_timestamp) .)

Tất nhiên, bạn không phải sử dụng DATE_TRUNC() chỉ để nhóm các bản ghi. Bạn cũng có thể sử dụng nó để lấy ngày đầu tiên của tháng cho một ngày nhất định.

Đối với mỗi chiếc đồng hồ, chúng ta hãy lấy độ chính xác tên và ngày sản xuất đến tháng - không cần phân nhóm. Đây là truy vấn bạn sẽ viết:

SELECT name,
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month
FROM watch;

Đây là kết quả:

name production_to_month
xem 2019-03-01 00:00:00
đồng hồ thông minh 2019-09-01 00:00:00
băng thông minh 2019-09-01 00:00:00

Trong truy vấn này, hàm DATE_TRUNC() cắt ngắn dấu thời gian thành độ chính xác tháng. Trong cơ sở dữ liệu của chúng tôi, đồng hồ thông minh có ngày sản xuất '2019-09-15 07:35:13'; bây giờ là '2019-09-01 00:00:00' , là ngày đầu tiên của tháng.


  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àm cách nào để thay đổi vị trí của một cột trong bảng cơ sở dữ liệu PostgreSQL?

  2. Chỉ chọn dấu thời gian của ngày hôm nay (kể từ nửa đêm)

  3. khách hàng psql có thể là một bàn cờ bây giờ…

  4. Làm thế nào để có được Thời gian tạo cơ sở dữ liệu trong PostgreSQL 9.0?

  5. Docker - Làm cách nào để chạy lệnh psql trong vùng chứa postgres?