我创建了一个表,其中包含名为date的列。现在,我需要找到一种方法来对结果集进行排序,并添加一个新列,该列仅在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)
SELECT *, (4 + ROW_NUMBER() OVER (ORDER BY `date`)) MOD 5 `number`
FROM sourcetable
您似乎将日期存储为字符串。您绝对应该修复该设计缺陷。
要订购记录,您需要将字符串转换为日期。为此,您可以使用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)