2

データベースにテーブルがあり、1 つの列に日付が含まれ、もう 1 つの列にスコアが含まれています。基本的に、私がやりたいことは、特定の週に最高のスコアを獲得することです.

週は任意の日 (たとえば、金曜日から木曜日まで) から開始でき、それはユーザーによって定義されます。

これが私がこれまでに持っているものです:

SELECT MAX(Series), DATE(DATE(Date, 'weekday 0'), '-7 days') dateStartOfWeek FROM SeriesScores
  WHERE Season = '2010-2011' 
  AND dateStartOfWeek = '2010-08-29'
  GROUP BY DateStartOfWeek

はスコアSeriesを含む列でDateあり、(悪い) 名前の付いた実際の日付です。

このクエリの問題は、週が始まるはずの日を除いて、毎日機能することです。

例: 2010-08-29 は日曜日です。この例では、特定の週の日曜日がどの日付であるかを調べようとしています。私の関数は、2010 年 8 月 29 日 (日曜日) を除くその週のすべての曜日で機能します。これは、日曜日である次の日 (この場合はそれ自体) を見つけようとするためです。これを補うために、正しい日曜日を取得するために 7 日間遡ります。これにより、すでに正しい日曜日に対してエラーが発生します。

この問題は Java を使用して簡単に解決できると考えましたが、代わりに SQL を使用してそれをどのように行うべきかを知りたいです。

私の解決策(それができるかどうかさえわかりません)は、日付とdateStartOfWeekが同じかどうかを確認することです。その場合、日付から 7 日を差し引かないでください。そうでない場合は、私の例で行ったようにしてください。ただし、このような条件を SQL で使用する方法がわかりません。ここで助けが必要です。

よろしくお願いします!

4

1 に答える 1

2

CASE演算子を使用する必要があると思います-http://sqlite.awardspace.info/syntax/sqlitepg09.htmを参照してください

編集 - 試してください:

SELECT MAX(Series), CASE WHEN STRFTIME ( '%w', Date ) = 0 THEN DATE(Date, 'weekday 0') ELSE DATE(DATE(Date, 'weekday 0'), '-7 days') END AS dateStartOfWeek FROM SeriesScores
  WHERE Season = '2010-2011' 
  AND dateStartOfWeek = '2010-08-29'
  GROUP BY DateStartOfWeek

http://www.sqlite.org/lang_datefunc.htmlを参照

于 2011-08-07T00:43:25.133 に答える