【问题标题】:How to return difference between timestamps in SQL?如何在 SQL 中返回时间戳之间的差异?
【发布时间】:2016-04-29 17:45:38
【问题描述】:

我在我的表上运行一个查询,使它按升序(从最旧到最新)返回时间戳。就像我写了一行ORDER BY timestamp

我需要我的结果有一个名为“Days Taken”的列,其中包含每个时间戳之间的差异,即(时间戳 2 - 时间戳 1)、(时间戳 3 - 时间戳 2)、(时间戳 4 - 时间戳 3)等等。如何使用 SQL 执行此操作?

value   timestamp             Days Taken
 2      2016-03-16 05:11:40    -
 3      2016-03-18 03:46:42    ?
 4      2016-03-18 04:09:44    ?
 5      2016-03-21 04:01:46    ?
 6      2016-03-22 04:38:17    ?

我无法将列 value 用作索引,因为它被定义为字符串而不是 int,这就是为什么 this 对我不起作用。 Days Taken 是我要计算的值。

编辑添加:我正在为 Vertica 运行 DbVisualizer,它似乎不支持 ON 子句中的子查询。

【问题讨论】:

  • 阅读手册会告诉你DATEDIFF()函数。
  • 是的,我应该更清楚。我知道该功能,但我不确定如何在同一查询的多行之间执行DATEDIFF()。自加入?
  • 那么您的架构是什么样的?编辑您的问题并添加,如果可以的话,它会让您想做的事情更加清晰。
  • @tadman 我已经把它放进去了,希望它更清楚一点!

标签: mysql sql


【解决方案1】:

尝试以下方法:

select datediff(dd, a.timestamp, b.timestamp)
  from #Table   a
  join #Table   b  on a.timeStamp = (select max(c.timeStamp) 
    from #Table c where c.timeStamp < b.timeStamp)

【讨论】:

  • 奇怪的是,DATEDIFF() 有三个参数。
  • 我已经尝试过这个版本,但我收到了这个奇怪的错误Subqueries in the ON clause are not supported
  • @tadman 是的,这是允许的 :) 它告诉函数返回天/周/小时/分钟等的差异。
  • 该表格记录在哪里?我找不到对它的引用。
  • @geekchic MySQL 通常只有 Postgres 和 SQL Server 的一小部分,所以检查语法时要小心。
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多