Присвоите номер дате, упорядоченной по дате

#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-го дня». Большое вам спасибо