Разделите значение SELECT на первую найденную запись - PullRequest
0 голосов
/ 06 декабря 2018

Я довольно неопытен с SQL, и у меня есть таблица, которая выглядит следующим образом (упрощенная версия):

ID | Dataset | date | value

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

Например, для набора данных1, если значение на 05/05/2018 равно 28, а первое значение в базе данных равно 4 на 01/01/2018, тоЯ хочу, чтобы результат был 28/4.

Дело в том, что не каждый набор данных был добавлен в базу данных одновременно, поэтому у них разные даты для их базовой линии.Так что, если в dataset1 есть первая запись на 01.01.2017, у dataset2 может быть первая запись на 02/02/2018.

Как мне поступить с этим запросом?Я попытался простой div, но кажется, что я могу разделить только на одно число, а не таблица значений по значению.

Я пробовал что-то вроде этого:

SELECT DATE(date) as time, value, dataset / (
SELECT min(DATE(date)) as time, value, dataset FROM table GROUP BY dataset)
FROM table GROUP BY time, dataset

но я думаю, что SQL ожидает, что знаменатель в этом случае будет одним значением, а не таблицей.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

«Я думаю, что SQL ожидает, что знаменатель будет в данном случае единственным значением, а не таблицей».Вы находитесь на правильном пути, поэтому суб-выбор должен вернуть одно значение, ниже приведен пример:

SELECT
  value, (select value from table b where a.dataset = b.dataset and b.dt = (select min(dt) from table c where b.dataset = c.dataset))
FROM 
  table a
0 голосов
/ 06 декабря 2018

В MySQL 8+ вы бы просто сделали:

select t.*,
       t.value / first_value(t.value) over (partition by t.dataset order by t.date) as ratio
from t;
0 голосов
/ 06 декабря 2018

Проверьте это:

SELECT   T1.Date
        ,T1.Value/T2.Value Value
FROM TempTable T1
INNER JOIN   TempTable T2
    ON  T2.Id
        =
        (SELECT   T2.Id
         FROM     TempTable T2
         WHERE    T1.Dataset=T2.Dataset 
         ORDER BY T2.Date 
         LIMIT 1
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...