按周列出选项的更改

时间:2013-08-26 07:53:45

标签: mysql sql relational-database

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

  

日期|选项|值

     

01/07/08 | optionA | value_a

     

01/07/08 | optionB | value_b

     

02/07/08 | optionA | value_a2

我们假设在第一个日期之前有一个选项(主键是日期和选项),没有选项设置。我们必须每天都这样做,每个选项都会覆盖之前的更改,但不会倒退。

我想知道如何加入此表格,以便每周都可以获得每个选项的全套值最新值。如下所示:

  

日期|选项|值

     

01/07/08 | optionA | value_a

     

01/07/08 | optionB | value_b

     

02/07/08 | optionA | value_a2

     

02/07/08 | optionB | value_b

3 个答案:

答案 0 :(得分:0)

希望我的问题是正确的

CREATE TABLE test.stack (      日期日期     ,option_field VARCHAR(50)     ,价值INT(5) )

TRUNCATE TABLE test.stack; 更换为test.stack VALUES('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) ;

SELECT ts.date,ts.option_field,ts.value FROM(     SELECT s.date,s.option_field,s.value,WEEK(s.date)AS week_no,MAX(DAYOFMONTH(s.date))as day_no     从test.stack s     GROUP BY s.option_field,week_no )AS ts ;

PS:我没有检查过性能

答案 1 :(得分:0)

我会使用组和顺序函数,例如:

select 
week(table1.date), table1.date, table1.option, table1.value
    from
table1
group by week(date) , table1.option
order by date desc;

答案 2 :(得分:0)

我在辅助频道上找到了所需的解决方案,所以这里是:

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

表日是包含您需要信息的每一天的日期,即天数列表。

这会考虑您在第一次加入时需要获取信息的每一天的每一天(表日的天数)。第二个联接搜索具有更多最新信息的可问责日期。如果没有最新信息,我们会使用WHERE data2.date IS NULL行将该行记录在帐户中。