0

我有一个包含许多数据行的表,其中有一列填充了日期。我需要在两个日期之间选择他们的第一行和最后一行。

示例:
评分表:

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

我需要获取 userId 1 的日期 2012-09-02 00:00:00 和 2012-09-04 00:00:00 之间的值 value1 和 value2。

期望的结果应该是:

userId    value1_old    value2_old    value1_new    value2_new
1         5             8             7             11

_old 值应包含较早的数据,但最接近日期 2012-09-02 00: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 回答