我想在三天内按百分比增加订购每个ID。如果三天前没有条目,则应将日期提前到今天。在下文中,我解释了数据库环境的布局。
我在MYSQL中有一个具有以下结构的表(注意:ID列不是唯一的。(。
CREATE TABLE test (
ID INT(3) NOT NULL,
value INT(3) NOT NULL,
date DATE NOT NULL
);
每天都会为n个ID插入新值。然后表格将看起来有点像这样:
ID | 值 | 日期|
---|---|---|
1 | 4 | 2020-12-08|
1 | 4 | 2020-12-07|
1 | 7 | 2020-12-06|
1 | 5 | 2020-12-05 |
2 | 10 | 2020-12-08 |
2 | 8 | 2020-12-07 |
2 | 7 | 2020-12-06|
3 | 10 | 2020-12-08 |
4 | 10 | 2020-12-08 |
这有点棘手,因为MySQL没有一个"第一个"/"最后一个";聚合函数。一种方法使用窗口函数:
select id, oldest_value, newst_value
from (select t.*,
row_number() over (partition by id order by date) as seqnum,
first_value(value) over (partition by id order by date) as oldest_value,
first_value(value) over (partition by id order by date desc) as newest_value
from test t
) t
where seqnum = 1
order by newest_value / oldest_value;
这需要MySQL 8+。这里有一个db<gt;不停摆弄