Как получить минимальный и максимальный набор строк в SQL?

0

С таблицей базы данных MySQL в следующем стиле:

A  B  C  D
-------------   
a, b, c, 1990
a, b, c, 1991
a, b, c, 1992
a, d, f, 1990
a, d, f, 1991
a, d, f, 1992
e, g, h, 1990
e, g, h, 1991

Есть простой или SQL-способ, чтобы заставить его сформироваться

a, b, c, 1990, 1992
a, d, f, 1990, 1992
e, g, h, 1990, 1991

?

В настоящее время я могу только думать о наборе уникальных комбинаций букв, для уникальной комбинации, проверяющей минимальные и максимальные годы, и вставки строк в новую таблицу. Текущая таблица используется в устаревшем модуле, который я не хочу касаться в это время.

  • 1
    Какой продукт СУБД вы используете? Postgres? Oracle? «SQL» - это просто язык запросов, а не название конкретного продукта базы данных.
  • 1
    Как называется таблица и как называются столбцы?
Показать ещё 2 комментария
Теги:

4 ответа

2
Лучший ответ
select A, B, C, max(D) as max_col, min(D) as min_col
from table
group by A, B, C
order by A,B,C
2

Просто суммируйте по трем столбцам и возьмите min/max:

SELECT
    col1, col2, col3, MIN(year) AS min_year, MAX(year) AS max_year
FROM yourTable
GROUP BY
    col1, col2, col3;
1
     select letter1,
            letter2,
            letter3,
            min(year),
            max(year) 
       from table 
   group by letter1,
            letter2,
            letter3 
   order by letter1,
            letter2,
            letter3
  • 0
    оказывает ли «порядок по» значимое влияние на производительность?
  • 1
    @Esa Это зависит от вашей РСУБД и от того, определены ли у вас индексы. Если это большая таблица, то иметь индекс на (буква 1, буква 2, буква 3) было бы блестящей идеей. Добавление года также в индекс может быть даже лучше. Обратите внимание, что в последнем случае индекс и таблица идентичны, в зависимости от вашей СУБД вы можете использовать какой-то специальный тип таблицы / индекса.
1

попробуй это -

select A, B, C, max(D), min(D) 
into #temp
from tablename
group by A, B, C

Ещё вопросы

Сообщество Overcoder
Наверх
Меню