2017-06-18 72 views
0

前選擇最近的行我有一個這樣的表稱爲tt一定時間戳

ID|Name|Date|Value| 
------------------------------------ 
0| S1| 2017-03-05 00:00:00| 1.5| 
1| S1| 2017-04-05 00:00:00| 1.2| 
2| S2| 2017-04-06 00:00:00| 1.2| 
3| S3| 2017-04-07 00:00:00| 1.1| 
4| S3| 2017-05-07 00:00:00| 1.2| 

我需要選擇具有最高時間行每個Name這是< theTime

theTime只是時間戳的變量。在這個例子中,你可以硬編碼一個日期字符串,例如< DATE '2017-05-01'我將在稍後用另一種語言以編程方式注入變量的值

我很難搞清楚如何做到這一點......有人知道嗎?

此外,我想知道如何選擇我上面描述的內容,但僅限於特定的name,例如, name='S3'

回答

1

這將是很好,如果HSQLDB真的支持row_number()

select t.* 
from (select tt.*, 
      row_number() over (partition by name order by date desc) as seqnum 
     from tt 
     where . . . 
    ) t 
where seqnum = 1; 

缺乏的是,使用group byjoin

select tt.* 
from tt join 
    (select name, max(date) as maxd 
     from tt 
     where date < THETIME 
     group by name 
    ) ttn 
    on tt.name = ttn.name and tt.date = ttn.maxd; 

注:這將返回重複,如果最大日期有重複給定名稱。

where對您的時間戳有限制。

+0

我覺得幸運的是,那永遠不會發生在我的數據庫中(給定名稱的重複日期) – ycomp