Как выбрать данные между двумя датами, которые связаны с определенным идентификатором в postgresql

Итак, у меня есть 2 таблицы. В первой таблице мне нужно связать идентификатор с минимальной и максимальной датой и временем, что я и сделал с

SELECT id, min (datetime) as earlytime, max(datetime) as latesttime
FROM table1
group by id

в результате я получаю около 5k с идентификатором и 2 временными метками.

Мне нужно использовать эту информацию, чтобы получить строки с идентификатором из таблицы 2, где дата и время для каждого идентификатора соответственно находятся между их ранним и последним временем. Или просто строки с идентификатором и временем, которые меньше последнего времени.

До сих пор не могу понять, как это сделать.

Придумал что-то подобное

SELECT ID, source, amount, type, datetime
FROM table2
WHERE EXISTS (SELECT ID, min (datetime) as earlytime, max (datetime) as latetime
FROM table1
group by ID)

Но я предполагаю, что он просто показывает любые строки, которые соответствуют идентификатору из таблицы 1.

Кто-нибудь может помочь мне с этим?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
17
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

возможно, вы можете присоединиться и получить результаты, как показано ниже

select A.* 
from table2 A 
join 
(
SELECT id, min (datetime) as earlytime, max(datetime) as latesttime
FROM table1
group by id
)B
on A.id=B.id and 
B.timecol between earlytime and latesttime

Спасибо. Думал, что с JOIN будет сложнее, но выглядит еще проще.

Gwinbleid 22.04.2022 21:07

Вы можете использовать комбинацию CTE или подзапроса (в зависимости от того, что вы предпочитаете) и BETWEEN() для достижения ожидаемого результата.

with cte as (
   select
      id
      ,min(datetime) as earlytime
      ,max(datetime) as latesttime
   from table1
   group by id
)

select
   c.id
   ,c.earlytime
   ,c.latesttime
   ,t2.* /*Table2 columns*/
from cte as c
inner join table2 as t2 ON c.id = t2.id 
  and t2.datetime between c.earlytime and c.latesttime
      
SELECT T2.ID,T2.SOURCE,T2.AMOUNT,T2.TYPE,T2.DATETIME
FROM TABLE2 AS T2
JOIN
(
  SELECT id, min (datetime) as earlytime, max(datetime) as latesttime
  FROM table1
  group by id
)X ON T2.ID=X.ID AND T2.DATETIME BETWEEN X.earlytime AND X.latesttime

Другие вопросы по теме