我试图在MS Access中重新格式化数据,因为行数超过Excel所能做的。然而,这是我第一次尝试使用子查询,并且可以在我应该做的事情上得到一些帮助。
我有如下数据:
t, id, x
1, 10, 1
1, 20, 5
1, 30, 10
2, 10, 2
2, 20, 7
2, 30, 14
,我试着把它排列成这个顺序:
id, t1, t2, x1, x2
10, 1, 2, 1, 2
20, 1, 2, 5, 7
30, 1, 2, 10, 14
...
10, 70, 71, 66, 68
等。
显示的数据是距离和时间值——所以我想重新格式化上面的数据,然后通过(x2 - x1)/(t2 - t1)计算速度。
Access可以提供帮助吗?我不太担心必须使用多个表/查询才能得到最终结果……只要我能到那里就行!!
从原始数据创建交叉表查询…然后使用另一个查询从交叉表查询选择到另一个表。
您需要将数据JOIN
到自身,并从连接的左侧获得t1和x1,从右侧获得t2和x2,诀窍在于连接。
首先,样本数据并没有真正涵盖足够的情况来了解真正需要的是什么,所以我在推断和猜测…
- 时刻t你记录了一些id的进度x,你想计算出每个间隔 的dx/dt
- t每次递增,但不一定递增一个
- t对于每个id都是唯一的
- x来了就来了。
首先我需要按顺序排列的行
SELECT
(
SELECT Count(*)
FROM Table1
WHERE [t] < [t1].[t]+1 AND id = t1.id;
) AS Rank
, *
FROM
Table1 AS t1;
调用Query1和
SELECT
a.id AS id
, a.t AS t1
, b.t AS t2
, a.x AS x1
, b.x AS x2
, (b.x - a.x) / (b.t - a.t) as Speed
FROM
Query1 as a
INNER JOIN
Query1 as b
ON
a.id = b.id
AND (a.rank + 1) = b.rank
bob's your uncle
你会使用sql server吗?或者你只是想用Access/Excel来做到这一点?你可以这样做与TextPad宏,以及如果你想得到真正的简单和创造性…