按周列出选项的更改



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

日期|选项|值

2008年7月1日|选项a |值_a

2008年7月1日|选项b |值_b

2008年7月2日|选项A |值_a2

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

我想知道如何加入这个表,这样我就可以每周获得每个选项的全套值最新值。类似以下内容:

日期|选项|值

2008年7月1日|选项a |值_a

2008年7月1日|选项b |值_b

2008年7月2日|选项A |值_a2

2008年7月2日|选项b |值_b

希望我答对你的问题

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

TRUNCATE TABLE test.stack;替换为test.stackVALUES('08/07/01','optionA',5),('08/07/01','选项B',6),('08/07/02','选项A',11),('08/07/02','选项B',33),('08/07/22','选项B',43),('08/07/24','选项B',235),('08/07/02','选项A',9),('08/07/22','选项A',465),('08/07/24','optionA',421);

选择ts.date、ts.option_field、ts.value来自(选择s.date、s.option_field、s.value、WEEK(s.date)作为WEEK_no、MAX(DAYOFMONTH(s.date))作为day_noFROM test.stack sGROUP BY s.option_field,week_no)AS 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

表中的天数包括您需要信息的每一天,即天数列表。

这会考虑到您需要获取第一次加入信息的每一天(表中的天数)的前一天。第二个加入搜索具有更新信息的责任日。如果没有最近的信息,我们使用WHERE data2.date IS NULL行来考虑该行。

最新更新