根据字段查找列表中的最新条目

时间:2013-07-12 18:33:31

标签: grails findby

我甚至不确定如何搜索这是否是现有问题。我举一个例子:

Call Instance   Date Created           Resource    Resource Status
------------------------------------------------------------------
6557            2013-07-12 11:34:19    cwood       Accepted
6556            2013-07-12 11:34:18    cwood       Accepted
                2013-07-12 11:29:25    cwood       Ready
6555            2013-07-12 09:24:41    cwood       Accepted

如何获取最高的两个已接受的条目而不获取最后一个已接受的条目(因为它来自Ready条目之前)?

除了创建日期之外的所有字段都是用户定义的类(Call,User [no,not Resource]和ResourceStatus)。

如果进一步的代码有用,请告诉我。

2 个答案:

答案 0 :(得分:1)

您可以使用takeWhile()

​assert [1,2] == [1,2,3,4,5].takeWhile { it < 3 }​

编辑 @dmahapatro的Audacity编辑答案
除接受和就绪之外的可用状态的小测试用例:

def list = ['A', 'A', 'B', 'A', 'R', 'A']
assert list.takeWhile{ it == 'A'} == ['A', 'A']
assert list.takeWhile{ it != 'R'} == ['A', 'A', 'B', 'A']

答案 1 :(得分:1)

以下问题陈述的逻辑:

哦,这是@dmahapatro的好点。有时用户可能会在打电话时忙碌,我想要获得在忙碌之前但在准备好之后发生的任何接受状态(“之前”在“右边”之后),并且不会获得忙碌。所以,我想我需要做statusDescription!='Ready'和statusDescription!='忙'左右。如果没有人必须使用它,代码肯定会更清洁!

def list = ['A', 'A', 'A', 'R', 'A', 'A','B', 'A']

def statusBeforeBusy = list.takeWhile{ it != 'B'}
println "Statuses before Busy: $statusBeforeBusy" //[A, A, A, R, A, A]

def statusBeforeReady = list.takeWhile{ it != 'R'}
println "Statuses before Ready: $statusBeforeReady" //[A, A, A]

def statusaAfterReadyBeforeBusy = statusBeforeBusy.dropWhile{ it != 'R'}.tail()
println "Statuses After Ready before Busy: $statusaAfterReadyBeforeBusy" //[A, A]