![](/img/trans.png)
[英]SQL retrieve all rows between two dates and a specific number of rows before the date ordered by date
[英]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.