我有一个 Marketorders 类,其中包含有关单一市场订单的信息,它们收集在市场快照中(由 Snapshot 类表示)。每个订单可以出现在多个快照中,最后一行当然是相关的。
class Marketorders(models.Model):
id = models.AutoField(primary_key=True)
snapid = models.IntegerField()
orderid = models.IntegerField()
reportedtime = models.DateTimeField(null=True, blank=True)
...
class Snapshot(models.Model):
id = models.IntegerField(primary_key=True)
...
我正在做的是跨多个快照获取所有订单以进行处理,但我只想包含每个订单的最新行。在 SQL 中,我会简单地做:
SELECT m1.* FROM marketorders m1 WHERE reportedtime = (SELECT max(reportedtime)
FROM marketorders m2 WHERE m2.orderid=m1.orderid);
或者更好的是加入:
SELECT m1.* FROM marketorders m1 LEFT JOIN marketorders m2 ON
m1.orderid=m2.orderid AND m1.reportedtime < m2.reportedtime
WHERE m2.orderid IS NULL;
但是,我只是不知道如何使用 Django ORM 来做到这一点。有没有办法在没有原始 SQL 的情况下做到这一点?
编辑:只是为了澄清问题。假设我们有以下市场订单(忽略所有不重要的内容,只使用 orderid、reportedtime):
1, 09:00:00
1, 10:00:00
1, 12:00:00
2, 09:00:00
2, 10:00:00
如何使用 ORM 获得以下设置?
1, 12:00:00
2, 10:00:00