Mysql 按周列出选项的更改

Mysql 按周列出选项的更改,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日|

我们有一个数据库表,以这种方式列出选项更改:

日期|期权|价值

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 |价值b


希望我没弄错你的问题

创建表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为空行