我不認爲這與Anorm直接相關,這將允許你填補之後分析結果中的空白。
第一個選項,你得到無序的結果爲List[(String, Long)]
使用.as(byhour.*)
,按日期排序,然後填寫爲零的缺少日期。
SQL"...".as(byhour.*).sortBy(_._1).
foldLeft(List.empty[(String, Long)]) {
case (p :: l, (d, t)) =>
(d, t) :: prefill(p, d, l)
case (l, (d, t)) =>
(d, t) :: l // assert l == Nil
}.reverse
/**
* @param p Previous/last tuple
* @param d Current/new date
* @param l List except `p`
* @return List based on `l` with `p` prepended and eventually before with some filler tuple prepended.
*/
def prefill(p: (String, Long), d: String, l: List[(String, Long)]): List[(String, Long)] = ???
否則,如果您查詢返回按日期排序的結果,則可以使用Anorm streaming API並在發現它時立即填充缺口。
// Anorm 2.3
import anorm.Success
SQL"... ORDER BY date ASC".apply().
foldLeft(List.empty[(String, Long)]) {
case (l, row) =>
byhour(row) match {
case Success((d, t)) =>
l match {
case p :: ts =>
(d, t) :: prefill(p, d, l)
case _ => (d, t) :: l
}
case _ => ??? // parse error
}
}.reverse
您使用的數據庫是? – 2014-11-06 20:10:11
我正在使用MySQL – 2014-11-06 20:11:18
可能的重複[生成日期範圍內的日期](http://stackoverflow.com/questions/2157282/generate-days-from-date-range) – 2014-11-06 20:26:23