【发布时间】:2021-01-10 01:42:54
【问题描述】:
所以我在 Postgres 数据库中有表 T,其中包含用户的日常值。从这张表中,我需要找到所有用户的属性C的昨天值和今天值之间的差值,并返回差值大于10的用户的ID。
整个事情可以在一两个查询中完成吗?我想到的解决方案很幼稚,需要为每个用户单独查询。任何比这更有效的东西也会很棒。
【问题讨论】:
标签: python django postgresql django-queryset
所以我在 Postgres 数据库中有表 T,其中包含用户的日常值。从这张表中,我需要找到所有用户的属性C的昨天值和今天值之间的差值,并返回差值大于10的用户的ID。
整个事情可以在一两个查询中完成吗?我想到的解决方案很幼稚,需要为每个用户单独查询。任何比这更有效的东西也会很棒。
【问题讨论】:
标签: python django postgresql django-queryset
如果没有表 T 的架构,这只是在黑暗中拍摄。就是这样:
WITH y_date AS (
SELECT
user_id, c
FROM
t
WHERE
timestamp_fld::date = current_date - (interval - '1 day')
),
WITH t_date AS (
SELECT
user_id, c
FROM
t
WHERE
timestamp_fld::date = current_date
)
SELECT
user_id
FROM
y_date
JOIN
t_date
ON
y_date.user_id = t_date.user_id
WHERE
abs(t_date.c - y_date.c) > 10
使用 CTE(Common Table Expression) 提取昨天和今天的值,然后加入这些结果以获得每个用户的绝对差值,并且只返回大于 10 的值。以上是基于一堆假设.更好的答案取决于更多信息。
【讨论】: