SQL join: selecting the last records in a one-to-many relationship에있는 스레드의 장고 버전입니다.django에서 "그룹당 최대 n 개"쿼리를 수행하는 방법은 무엇입니까?
고객 표와 구매 표가 있다고 가정합니다. 각 구매는 한 고객에게 속합니다. 마지막 구매와 함께 모든 고객의 목록을 얻고 싶습니다. 원시 SQL없이 여러 데이터베이스 쿼리없이 수행 할 수 있습니까?
SQL join: selecting the last records in a one-to-many relationship에있는 스레드의 장고 버전입니다.django에서 "그룹당 최대 n 개"쿼리를 수행하는 방법은 무엇입니까?
고객 표와 구매 표가 있다고 가정합니다. 각 구매는 한 고객에게 속합니다. 마지막 구매와 함께 모든 고객의 목록을 얻고 싶습니다. 원시 SQL없이 여러 데이터베이스 쿼리없이 수행 할 수 있습니까?
SELECT *
FROM customers с
LEFT JOIN
purchases p
ON p.id =
(
SELECT id
FROM purchases pl
WHERE pl.customer = c.id
ORDER BY
pl.customer DESC, pl.date DESC
LIMIT 1
)
는 테이블이 InnoDB
경우, 또는 purchases (customer, date, id)
에 테이블이 MyISAM
경우 당신이 purchases (customer, date)
에 복합 인덱스가 있는지 확인합니다.
Django에서 한 번의 쿼리로이 작업을 수행 할 수 없습니다. 이 같은 자신의 가장 최근에 구입 한 단지 날짜으로 고객을 얻을 수 있습니다 :
from django.db.models import Max
customers = Customer.objects.annotate(Max('purchase__date'))
하지만 당신은 자동으로이 방법으로 실제 구매에 액세스 할 수 없습니다.
당신은 유사한 논의를 좀 걸릴 수 있습니다
[다른 카테고리에서 가장 최근 객체를 가져옵니다 장고 쿼리]의 중복 가능성 (http://stackoverflow.com/questions/2074514/django -query-that-get-most-recent-objects-from-different-categories) – dbn