4

我正在尝试重新格式化 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 可以提供帮助的事情吗?对于必须使用多个表/查询来获得最终结果,我并不太在意……只要我到达那里!

4

3 回答 3

1

从您的原始数据创建一个交叉表查询...然后使用另一个查询从交叉表查询中选择另一个表。

于 2013-02-06T18:06:51.670 回答
0

您需要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

鲍勃是你的叔叔

于 2011-12-14T21:45:28.640 回答
0

可以用sql server吗?或者您只是想通过使用 Access/Excel 来做到这一点?如果您想获得真正的简单和创意,您也可以使用 TextPad 宏来执行此操作......特别是如果行始终按该顺序排列。

于 2012-01-03T17:30:17.970 回答