Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Select максимальной и минимальной даты  [new]
DDoroFF
Member

Откуда:
Сообщений: 3
Есть таблица
code date_low date_up sum
1 2015-01-01 2020-12-31 100
1 2021-01-01 2025-12-31 150

Как сделать select, чтобы получилась одна строка, в которой date_low минимальная, а date_up максимальная из этих двух строк. При этом sum берется из строки с максимальной date_up.[li]
19 окт 21, 16:50    [22385557]     Ответить | Цитировать Сообщить модератору
 Re: Select максимальной и минимальной даты  [new]
yens_gjytk
Member

Откуда: Samara/Saratov
Сообщений: 81
DDoroFF,

with t (code, date_low, date_up, sum) as (
  values (1, date '2015-01-01', date '2020-12-31', 100)
       , (1, date '2021-01-01', date '2025-12-31', 150)
)
select d.date_low
     , d.date_up
     , s.sum
  from (select min(t.date_low) as date_low
             , max(t.date_up)  as date_up
          from t) as d
 inner join (select t.date_up
                  , min(t.sum) as sum
               from t
              group by t.date_up) as s
    on s.date_up = d.date_up
19 окт 21, 17:17    [22385569]     Ответить | Цитировать Сообщить модератору
 Re: Select максимальной и минимальной даты  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1532
DDoroFF,
--
-- Тестовые данные:
with t (code, date_low, date_up, sum) as (
  values (1, date '2015-01-01', date '2020-12-31', 100)
       , (1, date '2021-01-01', date '2025-12-31', 150)
)
--
-- Основной запрос
select distinct code
      , min(date_low) over(partition by code) as min_date_low
      , max(date_up) over(partition by code) as max_date_up
      , first_value(sum) over(partition by code order by date_up desc) as x_sum
  from t

Но считать агрегат через аналитику - дурной тон.
Поэтому сразу делаем всё на агрегации:
--
-- Тестовые данные:
with t (code, date_low, date_up, sum) as (
  values (1, date '2015-01-01', date '2020-12-31', 100)
       , (1, date '2021-01-01', date '2025-12-31', 150)
)
--
-- Основной запрос:
select code
     , min(date_low) as min_date_low
     , max(date_up) as max_date_up
     , substring(max(to_char(date_up, 'yyyymmddhh24miss')||sum::text) from 15)::int as x_sum
  from t
 group by code
Вместо INT указать исходный тип данных поля SUM
22 окт 21, 20:25    [22387006]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить