Mysql 按周列出选项的更改
我们有一个数据库表,以这种方式列出选项更改: 日期|期权|价值 08年7月1日|选择a |价值a 08年7月1日|期权b |价值b 08年7月2日|选择A |价值| a2 我们假设在第一个日期之前,有一个选项主键是date和option,没有选项集。我们每天都要这样做,每个选项都会覆盖之前的更改,但不会向后 我想知道我如何加入这个表格,这样我就可以得到每周的全套值,每个选项的最新值。如下所示: 日期|期权|价值 08年7月1日|选择a |价值a 08年7月1日|期权b |价值b 08年7月2日|选择A |价值| a2 2008年7月2日|期权b |价值bMysql 按周列出选项的更改,mysql,sql,relational-database,Mysql,Sql,Relational Database,我们有一个数据库表,以这种方式列出选项更改: 日期|期权|价值 08年7月1日|选择a |价值a 08年7月1日|期权b |价值b 08年7月2日|选择A |价值| a2 我们假设在第一个日期之前,有一个选项主键是date和option,没有选项集。我们每天都要这样做,每个选项都会覆盖之前的更改,但不会向后 我想知道我如何加入这个表格,这样我就可以得到每周的全套值,每个选项的最新值。如下所示: 日期|期权|价值 08年7月1日|选择a |价值a 08年7月1日|期权b |价值b 08年7月2日|
希望我没弄错你的问题 创建表test.stack 日期 ,选项_字段VARCHAR50 ,值INT5 截断表test.stack; 替换为test.stack 值'08/07/01','optionA',5 ,'08/07/01','optionB',6 ,'08/07/02','optionA',11 ,'08/07/02','optionB',33 ,'08/07/22','optionB',43 ,'08/07/24','optionB',235 ,'08/07/02','optionA',9 ,'08/07/22','optionA',465 ,'08/07/24','optionA',421 ; 选择ts.date,ts.option\u字段,ts.value 从…起 选择s.date,s.option_字段,s.value,WEEKs.date作为周号,MAXDAYOFMONTHs.date作为日号 从test.s堆栈 按s分组选项字段,周号 作为ts ;
PS:我没有检查性能我会使用group和order功能,例如:
select
week(table1.date), table1.date, table1.option, table1.value
from
table1
group by week(date) , table1.option
order by date desc;
我在一个辅助通道上找到了所需的解决方案,因此:
SELECT
*
FROM
days days
INNER JOIN
table data
ON data.date <= days.date
LEFT OUTER JOIN
table data2
ON data2.date <= weeks.date
AND data2.option = data.option
AND data2.date > data.date
WHERE
data2.date IS NULL
表中的天数包括您需要信息的每一天,即天数列表
这会考虑到前一天的情况,因为您每天都需要获取表中的日期信息,即第一次联接的日期。第二个join搜索具有更多最新信息的责任日。如果没有更多的最新信息,我们将使用WHERE
data2.date为空行