Получить номер записи в диапазоне дат - автоматическая нумерация документов по месяцам - MySQL
Формулировка задачи:
Добрый день!
Есть задача сделать автоматическую нумерацию документов которая будет начинаться каждый месяц с 1.
Номер документа хранить в базе не получиться т.к. если удалить какой то док. - нумерация должна сдвинуться.
К примеру если удалить документ №2, то №3 должен стать №2
Плиз подскажите как это можно сделать для одной записи и для нескольких
Дата:
2016-11-03Номер:
3Дата:
2016-11-02Номер:
2Дата:
2016-11-01Номер:
1Дата:
2016-10-01Номер:
1 У меня получилось только вывести последовательно номера строк, но это не то...
Листинг программы
- SELECT
- (@ROW_NUMBER:=@ROW_NUMBER + 1) AS num,
- date_departure,
- FROM ae_flight_assignment, (SELECT @ROW_NUMBER:=0) AS t
- LIMIT 1, 30
Решение задачи: «Получить номер записи в диапазоне дат - автоматическая нумерация документов по месяцам»
textual
Листинг программы
- SELECT * FROM
- (
- SELECT table1.*,
- IF(@typex=MONTH(table1.DATE_F),
- @NUMBER:=@NUMBER+1,
- @NUMBER:=1+least(0,@typex:=MONTH(table1.DATE_F))) NUMBER
- FROM fruits table1, (SELECT @NUMBER:=1, @typex:='_') zz
- ORDER BY DATE_F DESC
- ) yy
Объяснение кода листинга программы
- Код написан на SQL языке и выполняет запрос к базе данных.
- Запрос выполняется на таблице
fruits
. - Внутренний подзапрос (в скобках) используется для инициализации переменных @NUMBER и @typex.
- Переменная @NUMBER инициализируется значением 1, а переменная @typex инициализируется значением месяца из столбца
DATE_F
первой строки таблицыfruits
. - Внешний запрос (не в скобках) выполняет выборку данных из таблицы
fruits
. - В выборку включены все столбцы таблицы
fruits
(SELECT *). - Для каждой строки выполняется расчет номера строки в текущем месяце (используется функция MONTH для извлечения месяца из столбца
DATE_F
). - Если месяц в текущей строке совпадает с месяцем в предыдущей строке, то переменная @NUMBER увеличивается на 1.
- Если месяц в текущей строке отличается от месяца в предыдущей строке, то переменная @NUMBER инициализируется значением 1, а переменная @typex инициализируется значением месяца из столбца
DATE_F
текущей строки. - Результатом запроса является список всех строк из таблицы
fruits
с добавленным столбцомNUMBER
, который показывает номер строки в текущем месяце. - Сортировка выполняется по столбцу
DATE_F
в порядке убывания. - Во внешнем запросе используется подзапрос с псевдонимом
yy
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д