sql - 如何计算 PostgreSQL 表中所有行的日期差异?

标签 sql database postgresql

我有一个名为effective 的表,它有id、开始时间、结束时间。

我想计算所有行的日期差异。我试过像下面的方法,

select DATE_PART('hour', age(endtime,starttime )) OVER (PARTITION BY id) as increase from effective

但是显示如下错误

ERROR: OVER specified, but date_part is not a window function nor an aggregate function

我想要这样的结果,

id || starttime                 || endtime                       || hour
1  || '2017-09-15 14:50:39.312' || '2017-09-15 16:50:34.349'     || 2
2  || '2017-09-15 14:50:34.349' || '2017-09-15 15:55:48.894319'  || 1

最佳答案

使用 date_part 并减去时间。

SELECT id, starttime, endtime, date_part('hour',endtime-starttime) AS hour
FROM effective

输出

id  starttime            endtime              hour
1   2017-09-15T14:50:39Z 2017-09-15T16:50:34Z 1
2   2017-09-15T14:50:34Z 2017-09-15T15:55:48Z 1

SQL fiddle :http://sqlfiddle.com/#!15/916ac9/2/0

此外,ID 1 从头到尾只有 1 小时 59 分 55 秒,而不是 2 小时。

关于sql - 如何计算 PostgreSQL 表中所有行的日期差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46241974/

相关文章:

node.js - 在 Postgres Node.js 应用程序中将 createAt 和 updatedAt 存储为纪元 unix 时间戳而不是 Date?

SQL - 根据特定列值创建两个新行条目

ruby-on-rails - UUID 作为 PostgreSQL 中的主键是否会带来糟糕的索引性能?

mysql - 在 n :m relationship table 中选择

sql - 获取sql server中的行数,包括列值

php - 数组中的两个 PHP 值

java - Hibernate:将foreign_key指向辅助表

java - 无法更新数字错误,类型 'NUMERIC' 的列无法保存类型 'CHAR' 的值

mysql - SQL WHERE 不过滤我的结果

database - 为什么 Prometheus 不适合长期存储?