选择要计算SQL的上一个日期记录

时间:2014-09-07 06:55:42

标签: sql sql-server sql-server-2008

我有下表:

ID     myDate       myTime     Value
1      2014-06-01   00:00:00   100
2      2014-06-01   01:00:00   125
3      2014-06-01   02:00:00   132
4      2014-06-01   03:00:00   139
5      2014-06-01   04:00:00   145
6      2014-06-01   05:00:00   148
FF.
24     2014-06-01   23:00:00   205
25     2014-06-02   00:00:00   209
26     2014-06-02   01:00:00   215
27     2014-06-02   02:00:00   223
FF.
48     2014-06-02   23:00:00   280
49     2014-06-03   00:00:00   290
50     2014-06-03   01:00:00   302
FF.
71     2014-06-03   22:00:00   389
72     2014-06-03   23:00:00   400
73     2014-06-04   00:00:00   405
FF.

我想要的是以下结果:

ID     myDate       ResultValue
1      2014-06-01   109
2      2014-06-02   81
3      2014-06-03   115
FF.

结果值为00:00:00时的下一个时间的值减去00:00:00时当前日期的值。例如,我想知道'2014-06-01'上的结果值。因此,查找ResultValue的计算是,next date ('2014-06-02')00:00:00的值209减去00:00:00上当前日期('2014-06-01')的值100。所以ResultValue是109

2014-06-02 00:00:00 --> (209) - 2014-06-02 00:00:00 --> (100)
Result: 109

有谁知道怎么做......? 谢谢。

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

SELECT
  ROW_NUMBER() OVER (ORDER BY t1.myDate) AS ID,
  t1.myDate,
  t2.Value - t1.Value AS ResultValue
FROM YOUR_TABLE t1
JOIN YOUR_TABLE t2
  ON t2.myDate = DATEADD(D, 1, t1.myDate)
WHERE t1.myTime = '0:00:00'
AND t2.myTime = '0:00:00'

答案 1 :(得分:0)

是的,你可以。请参考以下示例脚本。

DECLARE @tbl TABLE(dt DATETIME NOT NULL PRIMARY KEY,res INT NOT NULL);
INSERT INTO @tbl(dt,res)
VALUES
    ('2014-06-01T00:00:00',100),
    ('2014-06-01T01:00:00',125),
    ('2014-06-01T02:00:00',132),
    ('2014-06-02T00:00:00',209),
    ('2014-06-03T00:00:00',290),
    ('2014-06-04T00:00:00',405);

SELECT
    t1.dt,
    t2.res-t1.res AS diff
FROM
    @tbl AS t1
    INNER JOIN @tbl AS t2 ON
        t2.dt=t1.dt+1
WHERE
    (t1.dt - CAST(t1.dt AS DATE))=0
ORDER BY
    t1.dt;

通过选择下一个日期(t2.dt = t1.dt + 1)将数据表(t1)链接到自身(t2)。数据表(t1)中的选定日期仅限于时间部分= 00:00:00.000的日期。这是通过将日期转换为DATE类型(没有时间部分)来完成的。减法会留下应该等于零的时间部分。