2009-03-06 19 views
2

Sorgularım tanımlamak için hazırda beklemede kullandığım raporlama uygulamalarında bir süredir çalışıyorum. Bununla birlikte, giderek daha çok, kullanım durumlarını bildirmek için bu durumun en iyi yaklaşım olmadığını hissediyorum.Grup başına en üstteki n gibi karmaşık sorgular için hazırda bekletme yönteminin en iyi yolu

1) Sorgular, yalnızca kısmi sütunlar oluşturur ve bu nedenle yazılan nesneler içermez (tüm alanları java'ya aktarmadığınız sürece). 2) Doğrudan sql veya hql'ye gitmeden sorguları ifade etmek zordur.

Geçerli sorun şu ki, grup başına en üstteki N'yi almak istiyorum, örneğin gruptaki her öğe için son 5 gün, her gün ziyaretçi sayısını görüntüledim.

| RowName | 1-1-2009 | 2-1-2009 | 3-1-2009 | 4-1-2009 | 5-1-2009 
| SomeName| 1  | 42  | 34  | 32  | 35 

böyle bir çıkışa satır başına günde saklanan verileri dönüştürmek için en iyi yaklaşım nedir:

sonuç gibi görünmelidir? Normal sql'e geri dönme ve yazılmamış verilerle çalışma zamanı geldi mi?

Sonuçlarım için yazılan nesneleri gerçekten kullanmak istiyorum ama java hayatımı oldukça zorlaştırıyor. Herhangi bir öneri hoş geldiniz!

cevap

1

Kriterler API kullanarak, bunu yapabilirsiniz:

Session session = ...; 
Criteria criteria = session.createCriteria(MyClass.class); 
criteria.setFirstResult(1); 
criteria.setMaxResults(5); 
... any other criteria ... 
List topFive = criteria.list(); 

vanilya SQL Bunu yapmak için (ve Hazırda beklediğiniz yaptığını onaylamak için) this SO post göz atın:

+2

Bu üst gerçekten de 5, ancak soruda açıkça belirtildiği gibi grup başına değil ... – TomHastjarjanto

+0

Örneğinizden veri satırlarının tarih olup olmadığı net değil ve daha sonra bunların bir araya getirilmelerini sütunlara dönüştürüyor musunuz? Eğer öyleyse, bir ProjectionList ve bir 'sum' Projeksiyon kullanarak Hazırda bekletme yapabilirsiniz, sonra uygulamanızda pivot yapın. –

İlgili konular