SQL-запрос для расчета разницы между значением текущего и предыдущего дня - PullRequest
0 голосов
/ 21 июля 2011

У меня есть база данных Access .mdb с таблицей, которая выглядит примерно так:

+---------+------+--------+
|     date        | value |
+---------+------+--------+
|2011-05-04 12:00 | 45.9  |
|2011-05-05 12:00 | 21.2  |
|2011-05-06 12:00 | 32.2  |
|2011-05-07 12:00 | 30.4  |
|2011-05-08 12:00 | 40.4  |
|2011-05-09 12:00 | 19.8  |
|2011-05-10 12:00 | 29.7  |
+-------+---------+-------+

Я хотел бы создать запрос, который будет возвращать значения, полученные из вычитания одного значения из значения предыдущего дня.

Например: запрос вычислит (21,2-45,9) и возврат -24,7 (32.2-21.2) и возврат -11.0 (30.4-32.2) и возврат -1.8 и т.д.

Как я могу сделать это в операторе SELECT?

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Вы можете использовать запрос, который использует самосоединение в рассматриваемой таблице:

SELECT 
  t.dateValue , t.singleValue - IIF(ISNULL(tNext.singleValue), 0, tNext.singleValue)
FROM 
  test t 
  LEFT JOIN test tNext
  ON t.dateValue = DateAdd("d", -1, tNext.dateValue)
WHERE 
  t.dateValue = #2011-05-08 12:00#;

Выходы

dateValue               Expr1001
----------------------  ----------------
05/08/2011 12:00:00 PM  20.6000022888184

DDL и вставки ниже

CREATE TABLE test (dateValue DATETIME, singleValue SINGLE);

INSERT INTO test VALUES (#2011-05-04 12:00#, 45.9);
INSERT INTO test VALUES (#2011-05-05 12:00#, 21.2);
INSERT INTO test VALUES (#2011-05-06 12:00#, 32.2);
INSERT INTO test VALUES (#2011-05-07 12:00#, 30.4);
INSERT INTO test VALUES (#2011-05-08 12:00#, 40.4);
INSERT INTO test VALUES (#2011-05-09 12:00#, 19.8);
INSERT INTO test VALUES (#2011-05-10 12:00#, 29.7);
0 голосов
/ 21 июля 2011

Вот запрос, который работал для меня:

SELECT t2.date, t2.value-t1.value
FROM Table1 AS t1, Table1 AS t2
WHERE t2.date=DATEADD("d",1,t1.date);

Еще раз спасибо, Том Х.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...