Переформатирование данных с использованием Access + Subquery - PullRequest
4 голосов
/ 13 декабря 2011

Я пытаюсь переформатировать данные в 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? Я не слишком беспокоюсь о необходимости использовать несколько таблиц / запросов для достижения конечного результата ... Просто пока я туда попадаю !!!

Ответы [ 3 ]

1 голос
/ 06 февраля 2013

создать запрос кросс-таблицы из ваших исходных данных ... затем использовать другой запрос для выбора из запроса кросс-таблицы в другую таблицу.

0 голосов
/ 03 января 2012

Можете ли вы использовать sql server?Или вы просто пытаетесь сделать это с помощью Access / Excel?Вы также можете сделать это с макросом TextPad, если вы хотите сделать его по-настоящему простым и креативным ... особенно, если строки последовательно расположены в таком порядке.

0 голосов
/ 15 декабря 2011

Вам нужно JOIN данные для себя и получить t1 и x1 слева от объединения и t2 и x2 справа, трюк в соединении.

Сначала пример данных нена самом деле не охватывает достаточно случаев, чтобы увидеть, что действительно требуется, поэтому я делаю выводы и догадываюсь ...

  • в то время, когда вы записываете прогресс x для некоторых идентификаторов, и вы хотите выработать dx/ dt для каждого интервала
  • t увеличивается каждый раз, но не обязательно на единицу
  • t будет уникальным для каждого идентификатора
  • 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

и Боб - ваш дядя

...