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)

クエリはグループ化された週をvalue1正しく返しますvalue2が、週の始まりの行からのものでもあります。

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 に答える