0

我有一张桌子

Date        value1  value2
2012-09-07  1       1
2012-09-06  2       2
2012-09-05  3       3
2012-09-04  4       4
2012-09-03  5       5
2012-08-31  6       6
2012-08-30  7       7
2012-08-29  8       8
2012-08-28  9       9
2012-08-27  10      10
2012-08-24  11      11
2012-08-23  12      12
2012-08-22  13      13

表中的值不像示例中那样升序。有随机数。

我需要得到一周的开始日期,一周value1的开始和一周value2的结束。

日期字段是唯一的,它只存储日期,因此不允许重复日期。

我尝试使用以下查询:

SELECT MIN(`Date`) as Date, 
    (SELECT `value1` ORDER BY `Date` ASC LIMIT 1) as Start, 
    (SELECT `value2` ORDER BY `Date` DESC LIMIT 1) as End
FROM table
GROUP BY YEAR(`Date`), WEEK(`Date`,7)

查询正确返回分组的周,value1value2也从一周的行开始,即

2012-08-27  10      10

但是我需要:

2012-08-27  10      6

我做错了什么?

4

1 回答 1

1

这样的事情怎么样

SELECT `date`, value1 as Start, 
(SELECT value2 FROM photos WHERE t.date >= adddate(`Date`, INTERVAL 1-DAYOFWEEK(`Date`) DAY) AND  t.date <= adddate(`Date`, INTERVAL 7-DAYOFWEEK(`Date`) DAY) ORDER BY date DESC LIMIT 1) as endDate
from table t 
GROUP BY YEAR(`Date`), WEEK(`Date`,7)

可能有一种更优化的方法来做到这一点..但这有效

于 2012-09-08T13:11:09.860 回答