SQL-按日期排序的5行后增加

问题描述 投票:0回答:2

我创建了一个表,其中包含名为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)

mysql sql sql-order-by auto-increment
2个回答
1
投票
SELECT *, (4 + ROW_NUMBER() OVER (ORDER BY `date`)) MOD 5 `number`
FROM sourcetable

0
投票

您似乎将日期存储为字符串。您绝对应该修复该设计缺陷。

要订购记录,您需要将字符串转换为日期。为此,您可以使用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)
© www.soinside.com 2019 - 2024. All rights reserved.