34,587
社区成员
发帖
与我相关
我的任务
分享
with t1(dt, ll) as
(
select '2017-09-01 07:01:06',1172.936 union all
select '2017-09-01 08:02:47',1172.981 union all
select '2017-09-01 09:04:29',1173.023 union all
select '2017-09-01 10:06:10',1173.063 union all
select '2017-09-01 12:07:52',1173.11 union all
select '2017-09-01 15:09:33',1173.156 union all
select '2017-09-01 16:15:20',1174.42 union all
select '2017-09-01 17:15:20',1174.46 union all
select '2017-09-01 18:15:20',1174.503 union all
select '2017-09-01 19:00:20',1174.542 union all
select '2017-09-01 19:02:18',1174.545 union all
select '2017-09-01 19:05:59',1174.548 union all
select '2017-09-01 19:09:20',1174.551 union all
select '2017-09-01 20:15:20',1174.585 union all
select '2017-09-01 21:18:22',1174.629 union all
select '2017-09-02 00:18:22',1174.673 union all
select '2017-09-02 01:18:05',1174.715 union all
select '2017-09-02 02:15:02',1174.752 union all
select '2017-09-02 03:18:05',1174.792 union all
select '2017-09-02 04:00:01',1174.832 union all
select '2017-09-02 06:18:09',1174.873 union all
select '2017-09-02 06:58:09',1174.893 union all
select '2017-09-02 07:00:22',1174.913 union all
select '2017-09-02 07:01:22',1174.923 union all
select '2017-09-02 07:18:22',1174.953 union all
select '2017-09-02 09:33:01',1177.265 union all
select '2017-09-02 11:00:25',1177.306 union all
select '2017-09-02 13:18:22',1177.347 union all
select '2017-09-02 16:18:55',1177.388 union all
select '2017-09-02 18:00:22',1177.428 union all
select '2017-09-02 19:00:55',1177.467 union all
select '2017-09-02 19:01:01',1177.487 union all
select '2017-09-02 19:03:55',1177.497 union all
select '2017-09-02 19:30:55',1177.499 union all
select '2017-09-02 21:18:22',1177.508 union all
select '2017-09-02 23:18:59',1177.55 union all
select '2017-09-03 01:07:22',1177.586 union all
select '2017-09-03 02:01:18',1177.626 union all
select '2017-09-03 03:07:22',1177.667 union all
select '2017-09-03 05:07:55',1177.708 union all
select '2017-09-03 06:07:22',1177.749 union all
select '2017-09-03 06:58:22',1177.759 union all
select '2017-09-03 07:00:33',1177.788
)
, t2(dt2) as
(
select distinct CONVERT(varchar(10), dt, 120) from t1
)
select t2.dt2, MAX(ll)-MIN(ll) from t1
inner join t2 on t1.dt between CONVERT(datetime, t2.dt2+' 19:00:00') and CONVERT(datetime, t2.dt2+' 19:00:00')+0.5
group by t2.dt2
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
CREATE TABLE #T(CollectTime DATETIME,liuliang DECIMAL(18,5) )
Insert #T
select '2017-09-01 07:01:06',1172.936 union all
select '2017-09-01 08:02:47',1172.981 union all
select '2017-09-01 09:04:29',1173.023 union all
select '2017-09-01 10:06:10',1173.063 union all
select '2017-09-01 12:07:52',1173.11 union all
select '2017-09-01 15:09:33',1173.156 union all
select '2017-09-01 16:15:20',1174.42 union all
select '2017-09-01 17:15:20',1174.46 union all
select '2017-09-01 18:15:20',1174.503 union all
select '2017-09-01 19:00:20',1174.542 union all
select '2017-09-01 19:02:18',1174.545 union all
select '2017-09-01 19:05:59',1174.548 union all
select '2017-09-01 19:09:20',1174.551 union all
select '2017-09-01 20:15:20',1174.585 union all
select '2017-09-01 21:18:22',1174.629 union all
select '2017-09-02 00:18:22',1174.673 union all
select '2017-09-02 01:18:05',1174.715 union all
select '2017-09-02 02:15:02',1174.752 union all
select '2017-09-02 03:18:05',1174.792 union all
select '2017-09-02 04:00:01',1174.832 union all
select '2017-09-02 06:18:09',1174.873 union all
select '2017-09-02 06:58:09',1174.893 union all
select '2017-09-02 07:00:22',1174.913 union all
select '2017-09-02 07:01:22',1174.923 union all
select '2017-09-02 07:18:22',1174.953 union all
select '2017-09-02 09:33:01',1177.265 union all
select '2017-09-02 11:00:25',1177.306 union all
select '2017-09-02 13:18:22',1177.347 union all
select '2017-09-02 16:18:55',1177.388 union all
select '2017-09-02 18:00:22',1177.428 union all
select '2017-09-02 19:00:55',1177.467 union all
select '2017-09-02 19:01:01',1177.487 union all
select '2017-09-02 19:03:55',1177.497 union all
select '2017-09-02 19:30:55',1177.499 union all
select '2017-09-02 21:18:22',1177.508 union all
select '2017-09-02 23:18:59',1177.55 union all
select '2017-09-03 01:07:22',1177.586 union all
select '2017-09-03 02:01:18',1177.626 union all
select '2017-09-03 03:07:22',1177.667 union all
select '2017-09-03 05:07:55',1177.708 union all
select '2017-09-03 06:07:22',1177.749 union all
select '2017-09-03 06:58:22',1177.759 union all
select '2017-09-03 07:00:33',1177.788
Go
--测试数据结束
;WITH cte AS (
SELECT CONVERT(VARCHAR(10), a.CollectTime, 23) AS CollectTime ,
MIN(b.CollectTime) AS bCollectTime ,
MIN(a.CollectTime) AS aCollectTime
FROM #T a
LEFT JOIN #T b ON DATEDIFF(DAY, a.CollectTime, b.CollectTime) = 1
WHERE DATEPART(hh, a.CollectTime) = 19
AND DATEPART(hh, b.CollectTime) = 7
AND DATEDIFF(MINUTE, a.CollectTime, b.CollectTime) = 12 * 60
GROUP BY CONVERT(VARCHAR(10), a.CollectTime, 23)
)
SELECT cte.CollectTime ,
a.liuliang-b.liuliang AS liuliang
FROM cte
JOIN #T a ON a.CollectTime = cte.bCollectTime
JOIN #T b ON cte.aCollectTime = b.CollectTime
SELECT CONVERT(VARCHAR(10),a.CollectTime,23) AS CollectTime ,
b.liuliang - a.liuliang AS liuliang
FROM #T a
LEFT JOIN #T b ON DATEDIFF(DAY, a.CollectTime, b.CollectTime) = 1
WHERE DATEPART(hh, a.CollectTime) = 19
AND DATEPART(hh, b.CollectTime) = 7
AND DATEPART(MINUTE, a.CollectTime)=0
AND DATEPART(MINUTE, b.CollectTime)=0
AND DATEDIFF(MINUTE, a.CollectTime, b.CollectTime) = 12 * 60
楼主说的19点和7点,分和秒都会是0吗?--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
CREATE TABLE #T(CollectTime DATETIME,liuliang DECIMAL(18,5) )
Insert #T
select '2017-09-01 07:01:06',1172.936 union all
select '2017-09-01 08:02:47',1172.981 union all
select '2017-09-01 09:04:29',1173.023 union all
select '2017-09-01 10:06:10',1173.063 union all
select '2017-09-01 12:07:52',1173.11 union all
select '2017-09-01 15:09:33',1173.156 union all
select '2017-09-01 16:15:20',1174.42 union all
select '2017-09-01 17:15:20',1174.46 union all
select '2017-09-01 18:15:20',1174.503 union all
select '2017-09-01 19:00:20',1174.542 union all
select '2017-09-01 19:02:18',1174.545 union all
select '2017-09-01 19:05:59',1174.548 union all
select '2017-09-01 19:09:20',1174.551 union all
select '2017-09-01 20:15:20',1174.585 union all
select '2017-09-01 21:18:22',1174.629 union all
select '2017-09-02 00:18:22',1174.673 union all
select '2017-09-02 01:18:05',1174.715 union all
select '2017-09-02 02:15:02',1174.752 union all
select '2017-09-02 03:18:05',1174.792 union all
select '2017-09-02 04:00:01',1174.832 union all
select '2017-09-02 06:18:09',1174.873 union all
select '2017-09-02 06:58:09',1174.893 union all
select '2017-09-02 07:00:22',1174.913 union all
select '2017-09-02 07:01:22',1174.923 union all
select '2017-09-02 07:18:22',1174.953 union all
select '2017-09-02 09:33:01',1177.265 union all
select '2017-09-02 11:00:25',1177.306 union all
select '2017-09-02 13:18:22',1177.347 union all
select '2017-09-02 16:18:55',1177.388 union all
select '2017-09-02 18:00:22',1177.428 union all
select '2017-09-02 19:00:55',1177.467 union all
select '2017-09-02 19:01:01',1177.487 union all
select '2017-09-02 19:03:55',1177.497 union all
select '2017-09-02 19:30:55',1177.499 union all
select '2017-09-02 21:18:22',1177.508 union all
select '2017-09-02 23:18:59',1177.55 union all
select '2017-09-03 01:07:22',1177.586 union all
select '2017-09-03 02:01:18',1177.626 union all
select '2017-09-03 03:07:22',1177.667 union all
select '2017-09-03 05:07:55',1177.708 union all
select '2017-09-03 06:07:22',1177.749 union all
select '2017-09-03 06:58:22',1177.759 union all
select '2017-09-03 07:00:33',1177.788
Go
--测试数据结束
SELECT CONVERT(VARCHAR(10),a.CollectTime,23) AS CollectTime ,
b.liuliang - a.liuliang AS liuliang
FROM #T a
LEFT JOIN #T b ON DATEDIFF(DAY, a.CollectTime, b.CollectTime) = 1
WHERE DATEPART(hh, a.CollectTime) = 19
AND DATEPART(hh, b.CollectTime) = 7
AND DATEDIFF(MINUTE, a.CollectTime, b.CollectTime) = 12 * 60