0

データの行が多いテーブルがあり、その列には日付が入力されています。2つの日付の間の最初の行と最後の行を選択する必要があります。

例:
スコアテーブル:

id      userId       value1         value2        date
1       1            1              2             2012-09-01 00:00:00
2       1            5              8             2012-09-03 00:00:00
3       1            7              11            2012-09-04 00:00:00
4       1            9              14            2012-09-05 00:00:00

userId1の日付2012-09-0200:00:00と2012-09-0400:00:00の間の値value1とvalue2を取得する必要があります。

望ましい結果は次のようになります。

userId    value1_old    value2_old    value1_new    value2_new
1         5             8             7             11

値_oldには、それより古いが、日付2012-09-0200:00:00に最も近いデータが含まれている必要があります。
値_newには、それより前のデータが含まれている必要がありますが、日付に最も近い2012-09-04 00:00:00

問題は、これらのデータをどのように取得するかです。これを機能させる方法がわかりません。

よろしくお願いします、
マーク

4

1 に答える 1

2
SELECT   t.userId,
         first.value1 AS value1_old,
         first.value2 AS value2_old,
          last.value1 AS value1_new,
          last.value2 AS value2_new
FROM     (
  SELECT   userId, MIN(date) AS first, MAX(date) AS last
  FROM     Score
  WHERE    userId = 1
       AND date BETWEEN '2012-09-02 00:00:00' AND '2012-09-04 00:00:00'
) t
    JOIN Score first ON first.userId = t.userId AND first.date = t.first
    JOIN Score  last ON  last.userId = t.userId AND  last.date = t.last

sqlfiddleでそれを参照してください。

于 2012-09-13T10:32:23.603 に答える