gpt4 book ai didi

sql - 使用Django的ORM重写 "SELECT DISTINCT ON ..."

转载 作者:行者123 更新时间:2023-12-02 00:38:02 25 4
gpt4 key购买 nike

我在 Django 中使用以下模型:

class Hit(Model):
image = ForeignKey(Image)
user = ForeignKey(User)
timestamp = DateTimeField(auto_now_add = True)

我需要的基本上是一个列表,其中包含每个用户创建排序列表的“首次点击”(即同一图像没有较早时间戳的点击)的计数。

或者更简单,每次用户“首次点击”时,只包含一个包含用户名的列表。

在使用 PostgreSQL“DISTINCT ON”扩展的 SQL 中,这将是一个简单的查询,如:

SELECT DISTINCT ON (image_id) user_id FROM proj_hit ORDER BY image_id ASC, timestamp ASC;

有没有办法通过 Django 的 ORM 或(至少)可移植 SQL 获得此结果,即没有 PostgreSQL 扩展?

最佳答案

您可以随意更改您的模型吗?这将有助于将首次命中信息去规范化并存储在同一模型中或作为不同模型的一部分。

例如

class Hit(Model):
image = ForeignKey(Image)
user = ForeignKey(User)
timestamp = DateTimeField(auto_now_add = True)
is_first_hit = BooleanField(default = False)

然后您可以覆盖 save() 方法(或点击信号)以在保存时显式设置 is_first_hit。这会使插入和更新的成本更高一些,但会使查询变得非常容易。

关于sql - 使用Django的ORM重写 "SELECT DISTINCT ON ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com