我有一张桌子
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)
查询正确地返回分组周和value1
,但value2
也来自周开始的行,即
2012-08-27 10 10
但我需要:
2012-08-27 10 6
我做错了什么?
答案 0 :(得分: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)
可能有一种更优化的方式来实现它......但是这可行