提前感谢您的帮助。
我有一个SQL查询,一个不太热衷于Django的开发人员要求我演示如何使用该框架。
SELECT h.cuh_cur_code_inc, h.cuh_cur_code_out, h.cuh_rate, h.cuh_date
FROM
(
SELECT cuh_cur_code_inc, cuh_cur_code_out, MAX(cuh_id) as cuh_id_max
FROM cur_hist
WHERE cuh_cur_code_out = 'GBP'
GROUP BY cuh_cur_code_inc, cuh_cur_code_out
) latest
INNER JOIN cur_hist h ON latest.cuh_id_max = h.cuh_id
+------------------+------------------+----------+---------------------+
| cuh_cur_code_inc | cuh_cur_code_out | cuh_rate | cuh_date |
+------------------+------------------+----------+---------------------+
| EUR | GBP | 0.8126 | 2012-12-03 06:00:28 |
| USD | GBP | 0.6241 | 2012-12-02 06:00:25 |
+------------------+------------------+----------+---------------------+
上面是一个示例结果表。我可以通过2次调用实现上述结果(显然这并不困难),但我似乎无法重新创建内连接。
histories = CurHist.objects.filter(cuh_cur_code_out='GBP') \
.values('cuh_cur_code_inc', 'cuh_cur_code_out') \
.annotate(cuh_id_max=Max('cuh_id'))
histories = CurHist.objects.filter(cuh_id__in=[x['cuh_id_max'] for x in histories]).order_by('-cuh_rate')
该模型如下所示:
class CurHist(models.Model):
cuh_id = models.IntegerField(primary_key=True)
cuh_cur_code_inc = models.CharField(max_length=9)
cuh_cur_code_out = models.CharField(max_length=9)
cuh_rate = models.FloatField(null=True, blank=True)
cuh_date = models.DateTimeField(
我知道Django在对象管理器上的额外方法,但在这种情况下我不确定如何使用它。这是否是正确的接受方式,还是我试图通过圆孔安装方形钉?
任何帮助将不胜感激!