这是我到目前为止的查询,创建每日栏:
SELECT DISTINCT date_trunc('hour',t) AS date,
min(price) OVER w,
max(price) OVER w,
first_value(price) OVER w,
last_value(price) OVER w
FROM ticker
WINDOW w AS (PARTITION BY date_trunc('hour',t));
Run Code Online (Sandbox Code Playgroud)
将"小时"更改为"分钟"或"天"将为我提供与这些单位对应的条形图.
但是,如果我想要5分钟或15分钟的酒吧怎么办?date_trunc()不支持这些,我正在寻找一个很好的方式来做到这一点.
我有以下 Django (3.0) ORM 模型:
class Portfolio(models.Model):
code = models.CharField(max_length=20)
name = models.CharField(max_length=100)
date = models.DateField()
created = models.DateTimeField(blank=True, null=True, auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我想按字段对它们进行分组code,并且对于每个代码,仅采用具有最大值的投资组合date
我知道我可以使用以下查询:
Portfolio.objects.values('code').annotate(latest=Max('date'))
Run Code Online (Sandbox Code Playgroud)
但它存在三个问题:
code和latest字段,所以我失去了其他字段Portfolio对象的列表Max有效,因为date是 a DateField. 它也适用于其他数字字段类型,但是如果我想按 CharField 的值(字典顺序)对记录进行排序,name并获取每个组的第一条记录,该怎么办?所以,总而言之,我的问题是:如何使用 Django ORM 检索按一个或多个字段分组的 ORM 对象列表,并仅返回给定任意“order by”子句的每个组的第一个记录?
要描述我的查询问题,以下数据很有用:

单个表包含列ID(int),VAL(varchar)和ORD(int)
VAL的值可能会随着时间的推移而发生变化,ID标识的旧项目不会更新,而是附加.ID的最后一个有效项由最高ORD值(随时间增加)标识.
T0,T1和T2是输入数据的时间点.
解决方案不得涉及物化视图等,但应在单个SQL查询中表达.使用Postgresql 9.3.
我有一个名为review的表。
+-------------+-------------------------+
| category_id | date |
+-------------+-------------------------+
| 4 | 2020-10-29 00:33:23.485 |
| 4 | 2020-11-23 17:23:14.686 |
| 3 | 2020-11-23 17:28:59.032 |
+-------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)
我想按日期订购并且只获得唯一的category_id。
示例 [1]
按日期 desc排序(最新的在前),应返回:
+-------------+-------------------------+
| category_id | date |
+-------------+-------------------------+
| 3 | 2020-11-23 17:28:59.032 |
| 4 | 2020-11-23 17:23:14.686 |
+-------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)
exmaple [2]
并按日期 asc排序(最旧的在前),应返回:
+-------------+-------------------------+
| category_id | date |
+-------------+-------------------------+
| 4 | 2020-10-29 00:33:23.485 |
| 3 | 2020-11-23 17:28:59.032 …Run Code Online (Sandbox Code Playgroud)