2017-06-18 76 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