簡體   English   中英

Django Trunc 數據到 15 分鍾

[英]Django Trunc data to 15 minutes

我目前正在使用 Django 的Truc函數來聚合一天和一小時內的一些數據。

我想做同樣的事情,但超過 15 分鍾,而不是一個小時或一分鍾,但我無法弄清楚。

這是我當前查詢的示例:

data_trunc = data_qs.annotate(
   start_day=Trunc('date_created', 'minute', output_field=DateTimeField()))
   .values('start_day', 'content', 'device')

問題在於可以傳遞給Trunc'minutes'參數。 據我所知,在'hour''minutes'沒有選擇。

如何將我的數據分組超過 15 分鍾,並為數據分組提供更大的時間跨度?

我知道之后我可以手動完成此操作,但我真的很想讓數據庫為我完成此操作,因為有一個大型數據集要計算,而這種方式是我所擁有的最有效的方式。
如果這是唯一的方法,盡管我願意接受有關解決此問題的最有效方法的建議。

謝謝你的幫助


編輯
我應該指定我不希望使用原始 SQL 來執行此操作並堅持使用 Django ORM 或本機 Python。

嗯,

由於我不想走使用 Postgres 函數的道路並堅持使用 ORM,因此我最終手動截斷了迭代所有項目的數據。

def trunc_minutes(raw_data, groupping=15):

truncated_arranged = []
current_slice = []
end_time = raw_data[0]['start_day'] + timedelta(minutes=groupping)

for d in raw_data:
    if d['start_day'] <= end_time:
        current_slice.append(d)
    else:
        truncated_arranged.append(current_slice)
        current_slice = [d]
        end_time = d['start_day'] + timedelta(minutes=groupping)

return truncated_arranged

這可能不是最快的方法,但它有效並且不需要原始 SQL。


編輯:在代碼的else部分添加d以便不會忘記在新切片中獲得的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM