2016-04-09 36 views
2

Bir tarih saat alanına göre son (x) kayıt sayısı nasıl alınır. Slick, Scala ve JodaTime kütüphanesini kullanarak ? aşağıdaki kod olarak, sorunun açıklanması için son (x) tanımını uygulamak istiyorum.Bir tablodan en son kayıtları nasıl Slick'te DateTime tarafından iç içe sorguya göre

import org.joda.time._ 
import com.github.tototoshi.slick.PostgresJodaSupport._ 

def last(x: Int): DateTime=??? 

val callInfo = callTable.filter(_.calltime >= last(x)) 

Son yöntem için aşağıdaki gibi bir şey uygulamak mümkün mü? yuvalanmış sorgu içine sonuçlanması amaçlayan

def last(x: Int) = { 
    callTable.sortBy(_.calltime.desc).take(x).sortBy (_.calltime.asc).take(1).map{ _.calltime} 
    } 

bu Sorgu [Rep [Tercih [DateTime]], Opsiyon [DateTime], DİZİ] değil DateTime dönmek !! tam kod gibi bir şey olurdu

callTable.sortBy(_.calltime.desc).take(x) 

:

cevap

2

Ne istediğiniz calltime sıralamak ve daha sonra elemanların istenen sayıda almaktır inanıyoruz Ben senin doğru cevabı takdir

def last(x): DateTime = callTable.sortBy(_.calltime.desc).take(x).drop(x-1).map(_.calltime).headOption 

val callInfo = last(10).map { lastDate => callTable.filter(_.calltime > lastDate).list 
+0

ama cevabınızı alarak, \t def (x: Int) = { \t callTable.sortBy (_. calltime.desc) .take (x) .sortBy (_.calltime.asc) .take (1) .map {_.calltime} \t} yutmak için Tarih Saatini bulmak mümkündür. – ALMEK

+1

@ALMEK Sanırım sorunuzu yanlış anladım. Sınavındaki x nedir? Ve db tablosundaki sütun türü nedir? – nmat

+0

Üzgünüm, açık açık bir şekilde belirtilmemiş olabilir, iç içe bir sorguyu derlemek istiyorum, sütun DateTime ve x doğru olarak beklediğiniz gibi Int – ALMEK