所以,我有一個模型,看起來像這樣的日期不同的條目的查詢集:獲取具有儘可能接近要使用Django
class Names(models.Model):
name = models.CharField()
class Entries(models.Model):
name = models.ForeignKey(Names)
date = models.DateField()
的數據看起來是這樣
name | date
name_1 | 2011-06-01
name_2 | 2011-03-01
name_3 | 2011-02-01
name_1 | 2010-06-01
name_2 | 2010-03-02
name_3 | 2010-02-01
name_4 | 2009-07-01
我想要查詢具有日期的條目,並且獲得每個名稱記錄一次其中它是小於或等於到日期。所以,我想這回,如果我有時間2011-06-01查詢:
name_1 | 2011-06-01
name_2 | 2011-03-01
name_3 | 2011-02-01
name_4 | 2009-07-01
我的假設是,這將這樣的伎倆:
date = datetime(year=2011, month=06, day=01)
results = Entries.objects.filter(date__lte=date).order_by('date').distinct('name')
不過,我不斷收到重複的名稱項在那裏。
任何提示,朋友?
編輯:該解決方案由Gareth Rees提供。我只好稍微修改它,但它看起來是這樣的:
sql = """myapp_entries.id = (SELECT E.id from myapp_entries AS E
WHERE E.name_id = myapp_names.id AND
'"""+date.strftime('%Y-%m-%d')+"""'
ORDER BY E.date DESC
LIMIT 1)'''
results = (Entries.objects
.extra(where = [sql])
.filter(date__lte = date)
.order_by('name', 'date'))
隨着數據(NAME_1,2011-06-01),(NAME_1,2011-06-02)用 '2011-06-02' 日期篩選時,什麼是預期收益爲你? – 2012-04-21 11:29:10
Gareth解決了這個問題,但在回答你的問題時,日期應該小於或等於如此:** 2011-06-02 ** – lextoumbourou 2012-04-22 02:30:45