我正在使用从其他人继承的脚本处理Ingres数据库。我需要更改脚本以提取最新的start_time和end_time事件的action_times,以及两者之间的差异。在DB的样品下面列出Ingres SQL,根据另一列的值查找一列的最大值
id_num | version | action_id | action_time
----------------------------------------------------------------------------
1 2 start_time 2014-05-26 14:58:14
1 2 end_time 2014-05-26 14:58:16
1 4 start_time 2014-05-27 10:10:57
1 4 end_time 2014-05-27 10:10:11
到目前为止,我想出是:
SELECT max(a.action_time) as BIG, max(b.action_time) as SMALL, max(a.action_time) - max(b.action_time) as DIFF
FROM table1 as a, table1 as b,
WHERE a.id_num = '1' AND a.action_id = 'end_time' AND b.id_num = '1' AND b.action_id = 'start_time'
但结果出来如下:
BIG SMALL DIFF
----------------------------------------------------------------------------
2014-05-27 10:10:11 2014-05-27 10:10:57 null
道歉如果这样的问题已经得到解答(我确信它可能有),但我已经花了几天的时间来查看各种论坛,我找不到类似的例子,可能我是如何解释搜索条件的。任何帮助将不胜感激,我敢肯定,我会在大学里涵盖这样的东西,但那是几年前,我的SQL现在有点生疏。提前致谢!
编辑:所以一些研究,我想出了下面这将在DB GUI工作后:如果您想计算最大(a.acction_time)之间的差值
SELECT ingresdate(varchar(max(a.action_time))) as BIG, ingresdate(varchar(max(b.action_time))) as SMALL, date_part('secs',ingresdate(varchar(max(a.action_time))) - ingresdate(varchar(max(b.action_time)))) as DIFF
FROM table1 as a, table1 as b,
WHERE a.id_num = '1' AND a.action_id = 'end_time' AND b.id_num = '1' AND b.action_id = 'start_time'
该文档请参阅ms建议这应该是有效的。什么版本的Ingres?什么是基础类型?你确定'action_time'不是字符(已批准,我希望在这种情况下会出现错误...)?如果您尝试投射/添加间隔会发生什么?你想要什么样的结果差异?我建议将它作为一对子查询来完成 - 因为它有一个来自连接的大型笛卡尔积,并最终抛弃大部分行。 –
明天我要回来工作时,我需要检查一下Ingres的版本。 –
Ingres的版本是II 9.2.1/14210 –