选择特定时间戳之前的最新行

时间:2017-06-18 13:50:54

标签: sql hsqldb

我有一个名为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 个答案:

答案 0 :(得分: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对时间戳有限制。