Как отфильтровать таблицу SQL относительно определенной даты и времени? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь написать команду SQL, которая воссоздала бы данные отчета за определенную дату. Таблица имеет три столбца (местоположение (varchar), значение (int), datetime (datetime)). Со временем строки добавляются в таблицу для предоставления обновленных значений для каждого местоположения.

Какой SQL я должен использовать для: Для каждого местоположения возвращайте только строку с самой последней датой-временем до заданной даты-времени.

Пример:

Location       Value       Datetime

A              5              2011-01-01   
B              6              2011-01-01    
A              7              2012-01-01
A              8              2012-06-01

Если мне интересно узнать о 2012-05-01, я бы хотел вернуться к строкам 2 и 3.

Я имею в виду местоположение GROUP BY и указание для сохранения наибольшего значения даты и времени, которое меньше указанного времени. Я предполагаю, что есть некоторые встроенные функциональные возможности с объектами datetime в SQL, которые я должен использовать.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

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

select *
from mytable
where (location, datetime) in
(
  select location, max(datetime)
  from mytable
  where datetime < date '2012-05-01'
  group by location
);
0 голосов
/ 18 января 2019

В MySQL 8.x вы можете использовать оконную функцию ROW_NUMBER(). Например:

with x as (
  select
    location, value, datetime,
    row_number() over (partition by location order by datetime desc) as rn
  from my_table
  where datetime < '2012-05-01' -- cutoff date
)
select * from x where rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...