2013-04-02 2 views
2

내가 좋아하는 간단한 클래스를 가지고 :DataMapper에서 주문에 집계를 사용하는 방법은 무엇입니까?

class Foo 
    include DataMapper::Resource 
    property :id, Serial 
    property :bar, Text, lazy: false 
    property :created_on, DateTime, default: lambda { |r,p| DateTime.now } 
end 

내가 그들을 선택하려면, 바, 그룹화 및 최대 (created_on)에 의해 명령했다. 필요한 SQL은 다음과 같습니다.

SELECT "bar" FROM "foo" GROUP BY "bar" ORDER BY MAX("created_on") DESC 

그러나 DataMapper를 사용하여 얻는 방법을 모르겠습니다.

내가 좋아하는 뭔가를 시도했다 :

Foo.all(fields: [:bar], unique: true, order: [:created_on.desc.max]) 

을하지만 당신은 그런 식으로 최대를 사용할 수 없습니다. 나는 그것을하는 방법을 찾을 수 없습니다.

도와 주시겠습니까?

+1

를 살펴보고 "좋은"솔루션을 알아낼 수 없었다. 내가 한 일은 SQL을 직접 호출하거나 집계 필드를 추가하는 것입니다 (귀하의 경우에는 그렇게 생각하지 않습니다). – AlexQueue

답변

1

마치 최대 집계를 사용하지 않는 것처럼 보입니다. created_on 열의 내림차순으로 정렬하여 MAX를 찾고 거기에서부터 이동합니다.

당신은 아마 멀리 얻을 수 : 순서대로 .max 사용하지 않고

Foo.all(fields: [:bar], unique: true, order: [created_on.desc]) 

. 이 작품

SELECT "bar" FROM "foo" GROUP BY "bar" ORDER BY "created_on" DESC 

희망 :

이 동일 할 것이다.

또한 나는이 같은 문제가 없었다 http://datamapper.org/docs/find.html