当前位置: 首页 > 面试题库 >

如何为使用日期的BIGINT类型计数每天行数的HSQLDB形成SQL查询?

雷骁
2023-03-14
问题内容

我有一个HSQLDB,版本。1.8.0,带有示例架构的数据库,如下所示:

CREATE CACHED TABLE ENTRY
(ENTRYID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
 REQID VARCHAR,
 REVOCATIONDATE BIGINT)

我想检索每个日期的行计数,如下所示:

ENTRYID DATE_COUNT REVOCATIONDATE

1 10 2014-01-01  
2 5 2014-01-02  
3 15 2014-01-03

问题在于REVOCATIONDATE是一个BIGINT,而不是正常的日期或时间戳。这是供应商提供的数据库,因此,假设不允许更改架构。

如何创建执行此操作的SQL查询?


问题答案:

简单的答案是HSQLDB 1.8是一个旧版本,不支持某些高级功能。HSQLDB 2.3.x支持各种功能,可以在不同的表示形式之间进行转换。

使用HSQLDB
1.8,可以在Java中创建自己的函数,以将Timestamp的毫秒值转换为java.sql.Timestamp或java.sql.Date

在您创建的类中类似这样的内容:

static java.sql.Date millisToDate(long millis) {
    return new java.sql.Date(millis);
}

如果随后将此类包含在用于运行数据库的类路径中,则可以像下面这样在SELECT语句中调用该函数

SELECT ENTRYID, "myclass.millisToDate"(REVOCATIONDATE) FROM ENTRY

您的结果示例将如下所示:

SELECT MIN(ENTRYID), COUNT(ENTRYID), "myclass.millisToDate"(REVOCATIONDATE) FROM ENTRY
    GROUP BY "myclass.millisToDate"(REVOCATIONDATE)

我实际上没有尝试过上述任何建议,但是它们应该可以工作,也许需要进行一些改动。



 类似资料:
  • 问题内容: 我有以下需求 我有一个日志记录表,记录每天生成的som线索。 现在,我需要针对过去10天内每天的潜在客户数量生成一份报告。 可以说表看起来像这样: 我需要计算每天的潜在客户数量,共10天。因此,结果集应如下所示: … 等等 有人知道如何最好地做到这一点吗?我当前的解决方案是使用C#中的foreach进行迭代,但是我非常想将其传递到sql服务器上而不是sp中。 问题答案: 您可以使用:

  • 当我跑步时 我明白了 有没有其他方法将字符串格式化为日期?或者我应该继续这样做并进行一些修改。我已经有2列数据类型varchar,日期的格式为(mm/dd/yyyy)。我需要在它们之间执行减法以获得天数。当它是varchar格式时,不能这样做。

  • 问题内容: 我每天都在努力寻找#个活跃用户。 当他做了一个用户是活动 超过 每周10个请求4 个连续周 。 IE。自2014年10月31日起,如果用户每周总共在以下之间进行10次以上的请求,则该用户处于活动状态: 2014年10月24日至10月30日 ,以及 2014年10月17日至10月23日 , 2014年10月10日至10月16日 ,并且 2014年10月3日至10月9日 我有一张桌子: 样

  • 假设我给出了两个日期,如果差值是一个月,那么应该显示为30天。即使是月份也需要转换成我尝试过的带有年龄的天数(date,now()::timestamp,不带时区),但它给出了月份-日期-年份格式。例:10个月24天13:57:40.5265。但我需要遵循这条路。例如,如果有两个月的差异,那么我需要60天的输出。

  • 我的数据如下: 我想计算每个组每年日期之间的平均天数。我尝试了以下代码,但收到以下错误: 我的日期列的类别是日期。

  • 问题内容: 我正在计算从“开始”到“结束”日期之间的天数。例如,如果起始日期为2010年4月13日,起始日期为2010年5月15日,则结果应为 如何使用JavaScript获得结果? 问题答案: