我有下表:
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
有谁知道怎么做......? 谢谢。
答案 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类型(没有时间部分)来完成的。减法会留下应该等于零的时间部分。