Получить номер записи в диапазоне дат - автоматическая нумерация документов по месяцам - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день! Есть задача сделать автоматическую нумерацию документов которая будет начинаться каждый месяц с 1. Номер документа хранить в базе не получиться т.к. если удалить какой то док. - нумерация должна сдвинуться. К примеру если удалить документ №2, то №3 должен стать №2

Дата:

2016-11-03

Номер:

3

Дата:

2016-11-02

Номер:

2

Дата:

2016-11-01

Номер:

1

Дата:

2016-10-01

Номер:

1 У меня получилось только вывести последовательно номера строк, но это не то...
Листинг программы
  1. SELECT
  2. (@ROW_NUMBER:=@ROW_NUMBER + 1) AS num,
  3. date_departure,
  4. FROM ae_flight_assignment, (SELECT @ROW_NUMBER:=0) AS t
  5. LIMIT 1, 30
Плиз подскажите как это можно сделать для одной записи и для нескольких

Решение задачи: «Получить номер записи в диапазоне дат - автоматическая нумерация документов по месяцам»

textual
Листинг программы
  1. SELECT * FROM
  2. (
  3. SELECT table1.*,
  4. IF(@typex=MONTH(table1.DATE_F),
  5. @NUMBER:=@NUMBER+1,
  6. @NUMBER:=1+least(0,@typex:=MONTH(table1.DATE_F))) NUMBER
  7. FROM fruits  table1, (SELECT @NUMBER:=1, @typex:='_') zz
  8. ORDER BY DATE_F DESC
  9. ) yy

Объяснение кода листинга программы

  1. Код написан на SQL языке и выполняет запрос к базе данных.
  2. Запрос выполняется на таблице fruits.
  3. Внутренний подзапрос (в скобках) используется для инициализации переменных @NUMBER и @typex.
  4. Переменная @NUMBER инициализируется значением 1, а переменная @typex инициализируется значением месяца из столбца DATE_F первой строки таблицы fruits.
  5. Внешний запрос (не в скобках) выполняет выборку данных из таблицы fruits.
  6. В выборку включены все столбцы таблицы fruits (SELECT *).
  7. Для каждой строки выполняется расчет номера строки в текущем месяце (используется функция MONTH для извлечения месяца из столбца DATE_F).
  8. Если месяц в текущей строке совпадает с месяцем в предыдущей строке, то переменная @NUMBER увеличивается на 1.
  9. Если месяц в текущей строке отличается от месяца в предыдущей строке, то переменная @NUMBER инициализируется значением 1, а переменная @typex инициализируется значением месяца из столбца DATE_F текущей строки.
  10. Результатом запроса является список всех строк из таблицы fruits с добавленным столбцом NUMBER, который показывает номер строки в текущем месяце.
  11. Сортировка выполняется по столбцу DATE_F в порядке убывания.
  12. Во внешнем запросе используется подзапрос с псевдонимом yy.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы