我有一个名为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'
答案 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 by
和join
:
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
对时间戳有限制。