有一个表格,如下所示:
Id : long autoincrement;
timestamp:long;
price:long
时间戳以ms为单位给出unix_time。
问题:记录之间的平均时差是多少?
答案 0 :(得分:3)
首先想到的是一个子查询,它立即抓住了以前的记录:
SELECT timestamp -
(select top 1 timestamp from Table T1 where T1.Id < Table.Id order by Id desc)
FROM Table
然后你可以取平均值:
SELECT AVG(delta)
from (SELECT timestamp -
(select top 1 timestamp from Table T1 where T1.Id < Table.Id order by Id desc) as delta
FROM Table) T
可能需要对第一行产生的null进行一些处理,但我还没有测试确定。
答案 1 :(得分:1)
在SQL Server中,您可以编写类似的内容来获取该信息:
SELECT
t1.ID, t2.ID,
DATEDIFF(MILLISECOND, t2.PriceTime, test2.PriceTime)
FROM table t1
INNER JOIN table t2 ON t2.ID = t1.ID-1
WHERE t1.ID > (SELECT MIN(ID) FROM table)
如果您只对所有条目中的AVG感兴趣,可以使用:
SELECT
AVG(DATEDIFF(MILLISECOND, t2.PriceTime, test2.PriceTime))
FROM table t1
INNER JOIN table t2 ON t2.ID = t1.ID-1
WHERE t1.ID > (SELECT MIN(ID) FROM table)
基本上,您需要将表连接到自身,并使用“t1.ID = t2.ID-1”关联项目号。 2在一个表中,项目号。在另一个表中1,然后计算两者之间的时差。为了避免访问项目号。 0不存在,使用“T1.ID&gt;(SELECT MIN(ID)FROM table)”子句从第二项开始。
马克
答案 2 :(得分:0)
猜测:
SELECT AVG(timestamp)
我认为您需要在问题中提供更多信息,以便我们提供帮助。
答案 3 :(得分:0)
如果你的意思是每一行之间的差异:
select AVG(x) from (
select a.timestamp - b.timestamp as x
from table a, table b -- this multiplies a*b ) sub
答案 4 :(得分:0)
SELECT AVG(T2.Timestamp - T1.TimeStamp)
FROM Table T1
JOIN Table T2 ON T2.ID = T1.ID + 1
答案 5 :(得分:0)
试试这个
Select Avg(E.Timestamp - B.Timestamp)
From Table B Join Table E
On E.Timestamp =
(Select Max(Timestamp)
From Table
Where Timestamp < R.Timestamp)