Java JDBC PL/SQL上一行(LAG)仅返回当前值
我目前有一个包含各种数据的时间戳表,还有一个函数需要根据给定的时间戳“t”返回prev timestamp。 我在JDBC代码中准备好的语句中有以下查询:Java JDBC PL/SQL上一行(LAG)仅返回当前值,java,sql,oracle,jdbc,plsql,Java,Sql,Oracle,Jdbc,Plsql,我目前有一个包含各种数据的时间戳表,还有一个函数需要根据给定的时间戳“t”返回prev timestamp。 我在JDBC代码中准备好的语句中有以下查询: String query = "SELECT LAG(?,1) OVER (ORDER BY TIME_STAMP DESC) FROM " + TABLE; preparedStatement.setTimestamp(1, t); resultset与我的参数的时间戳完全相同,数据库中的行数与我的行数相同 如何返回上一个时间戳 如果
String query = "SELECT LAG(?,1) OVER (ORDER BY TIME_STAMP DESC) FROM " + TABLE;
preparedStatement.setTimestamp(1, t);
resultset与我的参数的时间戳完全相同,数据库中的行数与我的行数相同
如何返回上一个时间戳 如果您希望只获取给定时间戳之前的最后一个时间戳,下面的示例仅使用MAX应该可以。它总是只返回一行 如果给定的时间戳是表中最小的时间戳,它将返回NULL。 如果表中不存在给定的时间戳,它将返回NULL 创建测试表:
CREATE TABLE TIME_STAMP_EVENT(
EVENT_ID NUMBER,
TIME_STAMP TIMESTAMP
);
并填充它:
INSERT INTO TIME_STAMP_EVENT VALUES (1,TIMESTAMP '2017-01-01 00:00:00');
INSERT INTO TIME_STAMP_EVENT VALUES (2,TIMESTAMP '2017-02-01 00:00:00');
INSERT INTO TIME_STAMP_EVENT VALUES (3,TIMESTAMP '2017-03-01 00:00:00');
INSERT INTO TIME_STAMP_EVENT VALUES (4,TIMESTAMP '2017-04-01 00:00:00');
然后创建hibernate查询:
public Timestamp getPriorTimestamp(final Session session, final String testDateText) throws ParseException {
final SQLQuery theQuery = session.createSQLQuery(
"SELECT MAX(TIME_STAMP) FROM TIME_STAMP_EVENT WHERE TIME_STAMP < :theTimeStamp AND EXISTS (SELECT 1 FROM TIME_STAMP_EVENT SEMI_TIME WHERE SEMI_TIME.TIME_STAMP = :theTimeStamp)");
return (Timestamp) theQuery.setTimestamp("theTimeStamp",
(new SimpleDateFormat("dd-MMM-yyyy").parse(testDateText)))
.uniqueResult();
}
运行时:myService.getPriorTimestamp01-MAR-2017,返回2017-02-01 00:00:00.0之前的最后一个时间戳
但如果为不存在的记录myService.getPriorTimestamp01-MAR-2017运行,则返回NULL
如果为表myService.getPriorTimestamp01-JAN-2017中的最小时间戳运行,它将返回NULL查询字符串不应该是SELECT LAGTIME\u STAMP,1而不是表中的ORDER BY TIME\u STAMP DESC,而不是您发布的内容吗?@N00BPR0GRAMER否,这将返回整个表,只是偏移一个。我只需要一个相对于t的值。@N00bPr0grammer,尽管我可以做到这一点。大概有名单。是的,就是这个主意!Domenic我想知道您是希望在返回输入时间戳之前的最后一个时间戳之外,还是只返回输入时间戳之前的最后一个时间戳?你是想在这里一排只拿回一个场地吗?谢谢@Domenicportues很高兴听到这个消息。如果我能补充任何澄清,请告诉我