ВЫБЕРИТЕ МИНУТ из подмножества данных, полученных с помощью GROUP BY - PullRequest
1 голос
/ 25 марта 2019

Существует база данных с почасовыми данными временных рядов, где каждая строка в базе данных представляет один час.Пример:

TIMESERIES TABLE

id     date_and_time        entry_category
1      2017/01/20 12:00     type_1
2      2017/01/20 13:00     type_1
3      2017/01/20 12:00     type_2
4      2017/01/20 12:00     type_3

Сначала я использовал оператор GROUP BY, чтобы найти самую последнюю дату и время для каждого типа категории записи:

SELECT MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category;

Однако теперь я хочу найти, какиеэто дата и время, которое является ПОСЛЕДНИМ ПОСЛЕДНИМ из числа datetime, полученных мною с помощью запроса, указанного выше.Мне нужно будет как-то использовать SELECT MIN(date_and_time), но как мне сообщить SQL, что я хочу обработать вывод моего предыдущего запроса как «новую таблицу», чтобы применить новый запрос SELECT?Вывод моего общего запроса должен быть одним значением - в приведенном выше примере date_and_time = 2017/01/20 12:00.

Я пытался использовать псевдонимы, но, похоже, не смог добиться цели,они только переименовывают существующие столбцы или таблицы (или я их неправильно использую ...). Есть много вопросов, которые пытаются перечислить MAX или MIN для определенной группы (например, https://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ или Выберите максимумзначение каждой группы ) - это то, чего я уже достиг, но я хочу сейчас заняться этим списком полученных дат и времени.Моя база данных очень проста, но мне не хватает знаний, чтобы связать эти запросы вместе.

Спасибо, ура!

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

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

SELECT MIN(date_and_time)
FROM (SELECT MAX(date_and_time) as date_and_time, entry_category
FROM timeseries_table
GROUP BY entry_category)a;
0 голосов
/ 25 марта 2019

Это то, что вы хотите?

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC;

Это возвращает связи.Если вы не хотите связывать, включите дополнительный ключ сортировки:

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC, entry_category;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...