繁体   English   中英

SQL - 按日期排序 5 行后递增

[英]SQL - Increment after 5 rows ordered by date

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

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) x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM