2012-09-19 57 views
0

我被檢索從我的數據庫中的一些最新記錄,結果如下:從集合檢索日後在Java中

Date 
09/18/2012 1:34:34 AM 
09/8/2012 8:15:34 AM 
09/8/2012 12:02:11 AM 
08/30/2012 8:47:02 PM 
08/29/2012 11:44:00 PM 

從上面的列表中,有2個日期與2012年9月8日,我想選擇2012年9月8日上午08時15分34秒(後來的一個),這樣我的結果是這樣的:

Date 
09/18/2012 1:34:34 AM 
09/8/2012 8:15:34 AM 
08/30/2012 8:47:02 PM 
08/29/2012 11:44:00 PM 

我怎麼能去這樣做?提前:)

回答

0
select max(date_column) 
from table 
group by trunc(date_column) 
order by 1 
+0

對不起,這不起作用,因爲像Collections.max它捕獲集合中的最新日期。 –

+0

這與java收藏無關。 Oracle會給你所需的日期。 –

+0

或者我應該說這不起作用以及sql的max()像Collections框架的Collection.max()一樣工作。 –

3

使用min()方法由於從Collections

Collections.min(yourCollectionOfDate); 

java.sql.Datejava.util.Date已經實現了比較,這樣你就用這種方法得到的起步較晚

如果你想自定義的行爲,你可以通過Comparator的一個實例min()

另外你可以在數據庫端處理這個

+0

Collections.max將檢索名單的最後日期,所以這不會對我的情況下工作。 –

+0

使用'分鐘()'

1

爲什麼不直接執行您的查詢?

SELECT MAX(`DATE`) DateList 
FROM tableName 
GROUP BY DATE(`DATE`) 
+0

@BalkrishnaRawool謝謝你。我忽略了凌晨12:00早於上午8點哈哈..現在睡覺的時間。 –

0

你可以使用SortedSet的所有的日期從低到高排列。
您可以使用TreeSet的iterator()或descendingIterator()方法。
下面是一個例子

TreeSet<Date> set = new TreeSet<Date>(); 
    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm"); 
    set.add(df.parse("01.01.2000 12:00")); 
    set.add(df.parse("01.01.2000 09:00")); 
    set.add(df.parse("01.01.2000 18:00")); 

    System.out.println("First date: " + set.first()); 
    System.out.println("Last date: " + set.last()); 

    System.out.println("From low to high:"); 
    for (Date date : set) 
     System.out.println(date); 

    System.out.println("From high to low:"); 
    Iterator<Date> backIterator = set.descendingIterator(); 
    while (backIterator.hasNext()) 
     System.out.println(backIterator.next());