#sql #date
#sql #Дата
Вопрос:
В моей таблице есть два столбца; product_release_date (Дата) и number_sales (Int). Я хотел бы найти формулу SQL (новый столбец в моей таблице), которая присваивает номер или str типа «день 1», «день 2», …, «день 60» каждому дню каждой даты до 60 дней. Вот пример:
Если product_release_date = ‘2020-03-05’, я хотел бы иметь:
- ‘2020-03-05’ — день 1
- ‘2020-03-06’ — день 2
- . . .
- ‘2020-05-04’ — день 60
- ‘2021-11-05’ — день 1
- ‘2021-11-06’ — день 2
- . . .
- ‘2022-01-05’ — день 60
И то же самое для каждой другой даты независимо, если дата выпуска была в марте или ноябре.
Заранее благодарю вас.
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете. И, как вы описали проблему, у вас есть строки в таблице, и вы просто хотите присвоить последовательный номер.
2. Какую СУБД вы используете? (Когда дело доходит до даты / времени, многие продукты далеки от соответствия ANSI SQL.)
Ответ №1:
Если я правильно понимаю, вы можете использовать row_number()
:
select t.*, row_number() over (order by product_release_date) as seqnum
from t;
Если вы хотите это для каждого продукта (что имеет смысл), тогда вы должны использовать partition by
:
select t.*,
row_number() over (partition by product order by product_release_date) as seqnum
from t;
Комментарии:
1. Привет, Гордон, это не совсем то, что мне нужно. Я хочу для каждой даты, сколько продаж у меня было в первый день, затем сколько продаж на второй день … до 60 дней. Мне нужен новый столбец с этой информацией. Таким образом, в конце каждая дата будет содержать 60 строк с надписью: для launch_date «2020-03-05» — «первый день» — «product1» — «10 продаж». И затем для ТОЙ ЖЕ даты запуска и ТОГО ЖЕ продукта1 мне нужен «второй день» — «30 продаж» и так далее до «60-го дня». Большое вам спасибо