SQL - Инкремент после 5 рядов, упорядоченных по дате - PullRequest
0 голосов
/ 09 апреля 2020

Я создал таблицу, которая содержит столбец с именем date. Теперь мне нужно найти способ упорядочить набор результатов и добавить новый column, который увеличивается только после 5 упорядоченных дат.

Например,

------------------------
| Date        | Number |
------------------------
| 01/jan/2020 | 1      |
| 02/jan/2020 | 1      |
| 05/jan/2020 | 1      |
| 07/jan/2020 | 1      |
| 10/jan/2020 | 1      |
| 11/jan/2020 | 2      |
| 11/jan/2020 | 2      |
| 12/jan/2020 | 2      |
------------------------

Я использую MySQL.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020
SELECT *, (4 + ROW_NUMBER() OVER (ORDER BY `date`)) MOD 5 `number`
FROM sourcetable
0 голосов
/ 09 апреля 2020

Вы, похоже, храните даты в виде строк. Вы должны обязательно исправить этот недостаток дизайна.

Чтобы заказать запись, вам нужно связать строки с датами. Для этого вы можете использовать str_to_date(). Вы можете вычислить числа, используя row_number() и простую арифметику:

select
    date,
    1 + floor((row_number() over(order by str_to_date(date, '%d/%b/%Y')) - 1) / 5) rn
from mytable
order by str_to_date(date, '%d/%b/%Y')

В более старых версиях MySQL вы можете использовать переменную:

select date, 1 + floor((@rn := @rn + 1) / 5) rn
from (
    select date, str_to_date(date, '%d/%b/%Y') real_date
    from mytable
    order by real_date
) t
cross join (select @rn := -1) x
...