英文:
MYSQL Min Max Historic Values
问题
我有一个MYSQL表格,格式如下:
保险 日期 价值
A 2020-01-01 2
A 2020-02-01 5
A 2020-03-01 4
A 2020-04-01 6
A 2020-05-01 8
A 2020-06-01 1
A 2020-07-01 3
A 2020-08-01 7
A 2020-09-01 9
A 2020-10-01 3
A 2020-11-01 5
A 2020-12-01 6
B 2020-01-01 5
...
我想从这种方式中选择最小值和最大值(历史值):
在日期 2020-01-01 最小 2 最大 2
在日期 2020-02-01 最小 2 最大 5
在日期 2020-03-01 最小 2 最大 5
在日期 2020-04-01 最小 2 最大 6
在日期 2020-05-01 最小 2 最大 8
在日期 2020-06-01 最小 1 最大 8
在日期 2020-07-01 最小 1 最大 8
在日期 2020-08-01 最小 1 最大 8
在日期 2020-09-01 最小 1 最大 9
在日期 2020-10-01 最小 1 最大 9
在日期 2020-11-01 最小 1 最大 9
在日期 2020-12-01 最小 1 最大 9
我尝试找到解决方案,但只能在日期之间获取最小值和最大值,而不是逐月参考上个月。
你能帮我吗?谢谢!
英文:
I have a MYSQL table with this format:
Insurance Date Value
A 2020-01-01 2
A 2020-02-01 5
A 2020-03-01 4
A 2020-04-01 6
A 2020-05-01 8
A 2020-06-01 1
A 2020-07-01 3
A 2020-08-01 7
A 2020-09-01 9
A 2020-10-01 3
A 2020-11-01 5
A 2020-12-01 6
B 2020-01-01 5
...
I want SELECT Min and Max from this way (historic value)
in date 2020-01-01 Min 2 Max 2
in date 2020-02-01 Min 2 Max 5
in date 2020-03-01 Min 2 Max 5
in date 2020-04-01 Min 2 Max 6
In date 2020-05-01 Min 2 Max 8
In date 2020-06-01 Min 1 Max 8
In date 2020-07-01 Min 1 Max 8
In date 2020-08-01 Min 1 Max 8
In date 2020-09-01 Min 1 Max 9
In date 2020-10-01 Min 1 Max 9
In date 2020-11-01 Min 1 Max 9
In date 2020-12-01 Min 1 Max 9
T try to fin the solution, but only I get min and max value from a between dates, but not month to month with reference at last months.
Can you help me? THANKS
答案1
得分: 0
尝试以下查询以从表中获取日期的最小值和最大值:
SELECT DISTINCT date, MAX(value) AS max_value, MIN(value) AS min_value
FROM table_name GROUP BY date;
英文:
Try the follow query to get min and max value of a date from table: -
SELECT DISTINCT date, MAX(value) AS max_value, MIN(value) as min_value
FROM table_name group by data;
答案2
得分: 0
你似乎正在寻找在同一保险的所有先前行中进行窗口最小/最大值。您可以使用窗口函数(在 MySQL 8.0 中可用):
select t.*,
min(val) over(partition by insurance order by dt) min_val_so_far,
max(val) over(partition by insurance order by dt) max_val_so_far
from mytable t
保险 | dt | val | min_val_so_far | max_val_so_far |
---|---|---|---|---|
A | 2020-01-01 | 2 | 2 | 2 |
A | 2020-02-01 | 5 | 2 | 5 |
A | 2020-03-01 | 4 | 2 | 5 |
A | 2020-04-01 | 6 | 2 | 6 |
A | 2020-05-01 | 8 | 2 | 8 |
A | 2020-06-01 | 1 | 1 | 8 |
A | 2020-07-01 | 3 | 1 | 8 |
A | 2020-08-01 | 7 | 1 | 8 |
A | 2020-09-01 | 9 | 1 | 9 |
A | 2020-10-01 | 3 | 1 | 9 |
A | 2020-11-01 | 5 | 1 | 9 |
A | 2020-12-01 | 6 | 1 | 9 |
英文:
You seem to be looking for a window min/max over all preceding rows of the same insurance. You can use window functions (available in MySQL 8.0):
select t.*,
min(val) over(partition by insurance order by dt) min_val_so_far,
max(val) over(partition by insurance order by dt) max_val_so_far
from mytable t
insurance | dt | val | min_val_so_far | max_val_so_far |
---|---|---|---|---|
A | 2020-01-01 | 2 | 2 | 2 |
A | 2020-02-01 | 5 | 2 | 5 |
A | 2020-03-01 | 4 | 2 | 5 |
A | 2020-04-01 | 6 | 2 | 6 |
A | 2020-05-01 | 8 | 2 | 8 |
A | 2020-06-01 | 1 | 1 | 8 |
A | 2020-07-01 | 3 | 1 | 8 |
A | 2020-08-01 | 7 | 1 | 8 |
A | 2020-09-01 | 9 | 1 | 9 |
A | 2020-10-01 | 3 | 1 | 9 |
A | 2020-11-01 | 5 | 1 | 9 |
A | 2020-12-01 | 6 | 1 | 9 |
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论