2016-04-09 3 views
2

Как получить последнее (x) количество записей в соответствии с полем даты даты. с использованием библиотеки Slick, Scala и JodaTime? как следующий код, нужно использовать Последнее (x) определение для объяснения вопроса.Как выбрать самые последние записи из таблицы DateTime в Slick, вложенным запросом

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

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

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

Возможно ли реализовать для следующего метода что-то вроде следующего? что целью привести в вложенный запрос

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

это возвращает запрос [Rep [Option [DateTime]], опция [DateTime], Seq] не DateTime !!

ответ

2

Я считаю, что вы хотите, чтобы отсортировать calltime, а затем взять нужное количество элементов:

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

Полный код будет что-то вроде:

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

Я ценю ваш правильный ответ, но отвечая на ваш вопрос, я хочу реализовать что-то наподобие \t def last (x: Int) = { callTable.sortBy (_. calltime.desc) .take (x) .sortBy (_.calltime.asc) .take (1) .map {_.calltime} \t} кишка, чтобы получить дату. Время для сравнения возможно. – ALMEK

+1

@ALMEK Я думаю, что неправильно понял ваш вопрос. Что такое x в вашем примере? И каков тип столбца в таблице db? – nmat

+0

Прошу прощения, я, возможно, не уточнил, Я хочу, чтобы скомпилировать во вложенный запрос, столбец DateTime и x есть Int, как вы ожидали правильно – ALMEK