我有一个特定的查询要运行,它应该相互减去两行。它不应该减去整行而只减去指定的字段。我试图减去的数据是这样组织的:
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字段,这是否可行?我忘了提到每个对象都有两个以上的时间戳记录,但我真的只需要为最近的两个记录做。
答案 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