मुझे लगता है कि मुख्य समस्या यह है कि आप उन कार्यों को मिला रहे हैं जो एनोटेशन में उपयोग किए जाते हैं, एक समूहबद्ध क्वेरी सेट उत्पन्न करता है जैसे कि एक ऑपरेशन के साथ योग जो सरल दिए गए क्वेरी सेट में प्रत्येक रिकॉर्ड के लिए एक नया फ़ील्ड बनाते हैं जैसे कि yesterday_count=Window(expression=Lag("count"))
।
तो आदेश देना वास्तव में यहां मायने रखता है। तो जब आप कोशिश करें:
WidgetCount.objects.distinct("date").annotate(date=Trunc("time", "day"), yesterday_count=Window(expression=Lag("count")))
परिणाम क्वेरीसेट केवल WidgetCount.objects.distinct("date") एनोटेट किया गया है, कोई समूहीकरण नहीं किया गया है।
मैं आपके संचालन को डीकॉप्लिंग करने का सुझाव दूंगा ताकि यह समझना आसान हो जाए कि क्या हो रहा है, और ध्यान दें कि आप अजगर वस्तु पर पुनरावृति कर रहे हैं, इसलिए कोई नया प्रश्न करने की आवश्यकता नहीं है!
उदाहरण के रूप में SUM संचालन का उपयोग करने पर ध्यान दें क्योंकि मुझे FirstValue ऑपरेटर के साथ एक अनपेक्षित त्रुटि मिल रही है। तो मैं उस विचार को प्रदर्शित करने के लिए सम के साथ पोस्ट कर रहा हूं जो वही रहता है। केवल acc_count=Sum("count")
बदलकर पहले मान के लिए विचार समान होना चाहिए करने के लिए 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)
आउटपुट:
{'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}
यह पता चला है कि FirstValue ऑपरेटर को Windows फ़ंक्शन का उपयोग करने की आवश्यकता है ताकि आप FirtValue को नेस्ट न कर सकें और फिर अंतराल की गणना कर सकें, इसलिए इस परिदृश्य में मुझे बिल्कुल यकीन नहीं है कि क्या आप इसे कर सकते हैं। सवाल यह बन जाता है कि बिना नेस्टिंग विंडो के First_Value कॉलम तक कैसे पहुंचा जाए।