Как найти наибольший диапазон между связанными датами в столбце?

У меня есть база данных, в которой в одном столбце есть группы, а в другом — даты выпуска их альбомов. Как мне найти самую старую группу по разнице между датами их выпуска? т.е. самая старая группа не Band1, потому что они впервые выпустили альбом в 1968 году, по моему методу Band1 всего 7 лет (или активна в течение 7 лет, может быть лучше), а Band2 26 лет (годы активности), потому что 2001 - 1975 = 26.

Например:

Band......Rel_date

Band1....12/12/68

Band1....08/05/75

Band2....09/02/75

Band2....05/05/99

Band2....03/05/01

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

APC 06.04.2019 20:36

Я не понимаю, как это отвечает на мой вопрос. Я спрашиваю, как мне найти самое старое, не просто найдя самое старое значение, а найдя самое старое, найдя наибольшее количество времени между самым последним альбомом и первым альбомом.

iandrepont 06.04.2019 21:11

Я полагаю, что время активности было бы лучшей формулировкой, потому что я пытаюсь найти группу с наибольшим количеством времени между их старыми и самыми последними альбомами.

iandrepont 06.04.2019 22:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я понимаю, что вы спрашиваете

SELECT BAND
  FROM YOUR_TABLE
  WHERE REL_DATE = (SELECT MIN(REL_DATE)
                      FROM YOUR_TABLE)

должен сделать это.

РЕДАКТИРОВАТЬ

На основании дополнительной информации

WITH cteBand_activity AS
        (SELECT BAND,
                MIN(RELEASE_DATE) AS FIRST_RELEASE_DATE,
                MAX(RELEASE_DATE) AS LATEST_RELEASE_DATE,
                TRUNC((MAX(RELEASE_DATE) - MIN(RELEASE_DATE)) / 365) + 1 AS YEARS_ACTIVE
           FROM ALBUMS
           GROUP BY BAND
           ORDER BY YEARS_ACTIVE DESC)
SELECT BAND, YEARS_ACTIVE
  FROM cteBand_activity
  WHERE ROWNUM = 1

должен дать результат, который вы ищете.

dbfiddle здесь

Удачи.

Спасибо! Но я неправильно сформулировал свой вопрос. Я спрашиваю, как бы я вычислил, сколько лет группе, взяв их последний выпуск альбома и вычтя их первый выпуск альбома, чтобы найти их возраст. (возможно, годы активности могли бы быть лучшим термином для его описания)

iandrepont 06.04.2019 21:19

Написание хороших вопросов требует практики. Держись! Не сдавайся.

Bob Jarvis - Reinstate Monica 06.04.2019 22:56
Ответ принят как подходящий

Оракул 12с+

select band from your_table order by  rel_date fetch first 1 rows only; 

Если вы хотите включить галстуки, измените его на with ties вместо only

РЕДАКТИРОВАТЬ

select   band  from t 
group by band order by max(rel_date) - min(rel_date) desc fetch first 1 rows only;

РЕДАКТИРОВАТЬ2

Для версий Oracle до 12c:

select * from
(
    select   band  from t 
    group by band order by max(rel_date) - min(rel_date) desc
) where rownum = 1

Спасибо! Но я неправильно сформулировал свой вопрос. Я спрашиваю, как мне определить, сколько лет группе, взяв их последний выпущенный альбом и вычтя их первый альбом, чтобы найти, сколько лет они были активны.

iandrepont 06.04.2019 21:20

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

Kaushik Nayak 06.04.2019 21:24

Это не позволит мне задать еще один вопрос.. Как бы это лучше сформулировать? потому что кажется, что несколько человек неправильно поняли.

iandrepont 06.04.2019 21:29

@iandrepont: см. правки

Kaushik Nayak 06.04.2019 21:42

@iandrepont - дело не столько в "Несколько человек неправильно поняли", сколько в том, что вы не совсем четко объяснили свое требование в первый раз.

APC 06.04.2019 22:34

@Kaushik Nayak - Огромное спасибо. Хотя это дает мне ошибку с частью «выбрать только первые 1 строки». Пишет, что команда SQL введена неправильно. В настоящее время я пытаюсь найти решение, но если вы знаете, что это может быть, это тоже было бы здорово узнать.

iandrepont 06.04.2019 22:43

@iandrepont: проверьте мое второе редактирование, вы используете более старую версию Oracle. Как я уже упоминал в первой строке своего ответа, fetch first был только для версий Oracle 12c и выше.

Kaushik Nayak 07.04.2019 08:44

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