仅为每个值减去前两行

时间:2011-07-22 00:17:17

标签: mysql sql

我有一个特定的查询要运行,它应该相互减去两行。它不应该减去整行而只减去指定的字段。我试图减去的数据是这样组织的:

object # |       timestamp     | input_rate1 | output_rate1 | ...

   obj1  | 2011-07-20 05:53:33 |    349393   |    25843     | ...

   obj1  | 2011-07-20 05:23:20 |    222293   |    11019     | ...

结果将为00:30:13 | 127100 | 48824 .

我找到了一篇文章,展示了如何做到这一点,但他们的数据和我的数据之间的区别在于我没有一个id字段可以跟踪我所在的行。我尝试使用row_number(),但我的SQL服务器不支持它。

如果不使用id字段,这是否可行?我忘了提到每个对象都有两个以上的时间戳记录,但我真的只需要为最近的两个记录做。

2 个答案:

答案 0 :(得分:0)

如果你只想要这两个最新的丑陋查询应该这样做:

SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1
FROM
((SELECT * FROM `table` HAVING timestamp = max(timestamp)) as FIRSTTIME,
(SELECT * FROM `table` ORDER BY TIMESTAMP LIMIT 1,1) as SECONDTIME)

答案 1 :(得分:0)

SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1 FROM 
  (SELECT TOP 2 * FROM tableNAME WHERE objectNumber = 'obj1' ORDER BY timestamp DESC) A, 
  (SELECT * FROM A WHERE MAX(timestamp) FIRSTTIME, 
  (SELECT * FROM A WHERE MIN(timestamp)) SECONDTIME

你可能需要稍微承担一下,我主要使用Oracle和SQL,所以我不确定我是否使用了函数我不被允许。 我认为你必须使用限制而不是顶部。

SELECT TIMEDIFF(FIRSTTIME.timestamp,SECONDTIME.timestamp), FIRSTTIME.inputrate1 - SECONDTIME.inputrate1, FIRSTTIME.outputrate1 - SECONDTIME.outputrate1 FROM 
  (SELECT * FROM (SELECT * FROM tableNAME WHERE objectNumber = 'obj1' ORDER BY timestamp DESC) LIMIT 2) A, 
  (SELECT * FROM A WHERE MAX(timestamp) FIRSTTIME, 
  (SELECT * FROM A WHERE MIN(timestamp)) SECONDTIME