Подобная проблема может быть поднята здесь раньше, но очень сложно найти ответ, который я ищу.PostgreSQL - группировка определенных столбцов в SQL
Скажем, у меня есть таблица вроде этого:
isbn | Name 1 | Name 2 | Name 3 | Date
---------------+--------------------------+--------------+------------+------------
9998-01-101-9 | Duomenu bazes | Tadas | Onaitis | 1995-12-31
9998-01-101-9 | Duomenu bazes | Jonas | Onaitis | 1994-02-28
9998-01-101-9 | Duomenu bazes | Petras | Jonaitis | 1995-05-30
9998-01-102-7 | Programavimo kalbos | Petras | Jonaitis | 1995-05-30
Я хочу SELECT
эту таблицу так, что для каждого отдельного ISBN и имя 1 было бы минимальная дата.
Этого можно легко добиться с помощью функции агрегата MIN().
И зная, что столбцы ISBN и Name 1 эквивалентны, мы могли бы легко GROUP BY
эти столбцы и MIN(Date)
.
Однако у нас есть столбцы Имя 2 и Имя 3, привязанные к Дате.
И если мы попытаемся разместить их под предложением GROUP BY
, они будут проверены при группировке, и мы этого не хотим.
Мы хотим, чтобы строки 1-3 были одной группой, но они отделены друг от друга, потому что имя 2 и имя 3 делают эти строки отличными.
Итак, как это сделать, имя 2 и имя 3 не сгруппированы, а привязаны к столбцу Date и действуют как 1 столбец?
Никаких новых созданий или представлений в таблице не допускается.
Попытка решения: внутренняя SELECT
присоединение к дате из другой таблицы, но это не сработает, если даты дублируются.
Похож на вопрос, связанный с OVER (Partition by ..), доступный в Oracle – Massimo
Я мог бы использовать версию для Sybase ASE 15.7 – Horaciux