您可以使用the to_dsinterval() function 将您的时间字符串添加到日期,在它前面加上一个零作为天数(因此它是一个有效的sql_format):
select datum, zeit, datum + to_dsinterval('0 ' || zeit)
from your_table:
DATUM ZEIT DATUM+TO_DSINTERVAL('0'||ZEIT)
------------------- -------- ------------------------------
2016-01-13 00:00:00 13:22:30 2016-01-13 13:22:30
2016-01-13 00:00:00 13:26:30 2016-01-13 13:26:30
2016-01-13 00:00:00 13:27:30 2016-01-13 13:27:30
2016-01-13 00:00:00 13:28:30 2016-01-13 13:28:30
2016-01-13 00:00:00 13:29:30 2016-01-13 13:29:30
2016-01-13 00:00:00 13:30:30 2016-01-13 13:30:30
2016-01-13 00:00:00 13:31:30 2016-01-13 13:31:30
然后您只需在该计算值上使用max():
select max(datum + to_dsinterval('0 ' || zeit))
from your_table;
MAX(DATUM+TO_DSINTERVAL('0'||ZEIT))
-----------------------------------
2016-01-13 13:31:30
要获得匹配的行,您可以这样做:
select datum, zeit --, other columns
from your_table
where datum + to_dsinterval('0 ' || zeit) = (
select max(datum + to_dsinterval('0 ' || zeit))
from your_table
);
虽然这必须打两次,但你可以通过 CTE 避免。
您还可以使用分析排名函数,按日期和时间排序:
select datum, zeit, -- other columns,
dense_rank() over (order by datum desc, zeit desc) as rnk
from your_table;
DATUM ZEIT RNK
------------------- -------- ----------
2016-01-13 00:00:00 13:31:30 1
2016-01-13 00:00:00 13:30:30 2
2016-01-13 00:00:00 13:29:30 3
2016-01-13 00:00:00 13:28:30 4
2016-01-13 00:00:00 13:27:30 5
2016-01-13 00:00:00 13:26:30 6
2016-01-13 00:00:00 13:22:30 7
然后选择排名第一的行:
select datum, zeit --, other columns
from (
select t.*, dense_rank() over (order by datum desc, zeit desc) as rnk
from your_table t
)
where rnk = 1;
DATUM ZEIT
------------------- --------
2016-01-13 00:00:00 13:31:30
如果您从问题建议的行中获取其他数据,那么如果您可能有两行具有相同的日期和时间,您将需要决定如何打破平局并选择其中之一。