使用 Access + Subquery 重新格式化数据
Posted
技术标签:
【中文标题】使用 Access + Subquery 重新格式化数据【英文标题】:Reformatting data using Access + Subquery 【发布时间】:2012-01-19 10:06:15 【问题描述】:我正在尝试重新格式化 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 可以提供帮助吗?对于必须使用多个表/查询来获得最终结果,我并不太在意……只要我到达那里!!!
【问题讨论】:
这里@所以我们提供帮助,但到目前为止你有什么? 到目前为止,主要是逻辑!这是我最初的想法: (1.) 按 id 对数据排序,然后 t (2.) 如果 t+1 处的 id 值不等于 t 处的 id 值,这应该给出 t2 和 x2 的值 (3 .) 如果 t-1 处的 id 值不等于 t 处的 id 值,这应该给出 t1 和 x1 的值 我的逻辑是否经得起推敲? 它们总是奇数和偶数吗? t = 1 与 t = 2.. t = 69 与 t = 70 配对? 这在我看来很像交叉表查询。 @TonyHopkinson 配对并不总是奇偶,但不会彼此相等。例如。在第 1 到第 5 行,t 值可能是 1,但在第 6 到第 12 行,t 值可能是 7。有意义吗? 【参考方案1】:您需要将数据JOIN
传递给自身,并从联接的左侧获取 t1 和 x1,从右侧获取 t2 和 x2,诀窍就在联接中。
首先,样本数据并没有真正涵盖足够的案例来了解真正需要什么,所以我在推断和猜测......
在时间 t 记录某些 id 的进度 x,并且您想计算每个间隔的 dx/dt t 每次递增,但不一定是 1 t 对于每个 id 都是唯一的 x 会来的。首先我需要按顺序排列ranked
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
鲍勃是你的叔叔
【讨论】:
【参考方案2】:你可以使用sql server吗?或者您只是想通过使用 Access/Excel 来做到这一点?如果您想获得真正的简单和创意,您也可以使用 TextPad 宏来执行此操作......尤其是如果行始终按该顺序排列。
【讨论】:
【参考方案3】:从您的原始数据创建一个交叉表查询...然后使用另一个查询从交叉表查询中选择另一个表。
【讨论】:
以上是关于使用 Access + Subquery 重新格式化数据的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 NSPredicate 中使用嵌套的 SUBQUERY?
Symfony3 QueryBuilder使用Subquery进行更新