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

Django Window chú thích bằng cách sử dụng kết hợp với mệnh đề riêng biệt

Tôi nghĩ rằng vấn đề chính là bạn đang trộn các thao tác được sử dụng trong chú thích tạo ra một tập hợp truy vấn được nhóm lại chẳng hạn như tính tổng với một thao tác đơn giản tạo trường mới cho mỗi bản ghi trong tập truy vấn đã cho, chẳng hạn như yesterday_count=Window(expression=Lag("count")) .

Vì vậy, đặt hàng thực sự quan trọng ở đây. Vì vậy, khi bạn thử:

WidgetCount.objects.distinct("date").annotate(date=Trunc("time", "day"), yesterday_count=Window(expression=Lag("count")))

Bộ truy vấn kết quả chỉ đơn giản là chú thích WidgetCount.objects.distinct ("ngày"), không có nhóm nào được hoàn thiện.

Tôi khuyên bạn nên tách các hoạt động của bạn để dễ hiểu hơn những gì đang xảy ra và lưu ý rằng bạn đang lặp lại đối tượng python nên không cần thực hiện bất kỳ truy vấn mới nào!

Lưu ý khi sử dụng thao tác SUM chẳng hạn vì tôi gặp lỗi không mong muốn với toán tử FirstValue. Vì vậy, tôi đăng bài với Sum để chứng minh ý tưởng vẫn giữ nguyên. Ý tưởng phải giống nhau đối với giá trị đầu tiên chỉ bằng cách thay đổi acc_count=Sum("count") thành first_count=FirstValue("count")

for truncDate_groups in Row.objects.annotate(trunc_date=Trunc('time','day')).values("trunc_date")\
                      .annotate(acc_count=Sum("count")).values("acc_count","trunc_date")\
                      .order_by('trunc_date')\
                      .annotate(y_count=Window(Lag("acc_count")))\
                      .values("trunc_date","acc_count","y_count"):
    print(truncDate_groups)

ĐẦU RA:

{'trunc_date': datetime.datetime(2020, 1, 20, 0, 0, tzinfo=<UTC>), 'acc_count': 65, 'y_count': None}
{'trunc_date': datetime.datetime(2020, 1, 21, 0, 0, tzinfo=<UTC>), 'acc_count': 75, 'y_count': 162}
{'trunc_date': datetime.datetime(2020, 1, 22, 0, 0, tzinfo=<UTC>), 'acc_count': 162, 'y_count': 65}

Hóa ra toán tử FirstValue yêu cầu sử dụng một hàm Windows để bạn không thể lồng FirtValue và sau đó tính toán Lag, vì vậy trong trường hợp này, tôi không chắc bạn có thể thực hiện được hay không. Câu hỏi trở thành cách truy cập cột First_Value mà không lồng các cửa sổ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres CHỌN ... ĐỂ CẬP NHẬT trong các chức năng

  2. lỗi ngủ đông:Không có khóa chính cho bảng được tham chiếu

  3. Giá trị cột tăng dần theo điều kiện nhất định trong truy vấn SQL trên Postgresql

  4. Cách chuyển đổi dấu thời gian thành số nguyên (Unix epoch) trong Postgres

  5. Có thể tạo cơ sở dữ liệu postgres trong dòng lệnh nhưng không phải trong tập lệnh bash