sql-server - SQL Server 总和查询每 06:30 AM
问题描述
真的需要一些帮助:我有一个这样的 SQL Server 表:
我想每天从今天 06:30 到明天 06:29 进行查询以计算价值。
问题是,该值并非从 0 开始,每 06:30。
我需要这样的查询:首先选择每个代码的最大值,例如:
(code : value)
M12 : 108,
M77 : 26
那么 M77 值不是从 06:30 开始的。
我需要做:26 - 12(06:30:00 之前的值),所以 M77 现在是 14。
最后将 M77 和 M12 = 14 + 108 = 122 相加。
我的预期输出仅适用于每个日期的总价值。
根据我的数据库(图像),总值将为 26 - 12 = 14。
- 26 是最新值。
- 12 是 06:30 之前的值
如何在 SQL Server 中做到这一点?请帮我
解决方案
试试这个谜题:
CREATE TABLE TestTable
(
[date] datetime,
value int,
code varchar(10)
)
GO
INSERT INTO [dbo].[TestTable]
([date]
,[value]
,[code])
VALUES
('2018-09-13 06:20:52.803'
,100
,'M12'),
('2018-09-13 06:21:52.803'
,102
,'M12')
, ('2018-09-13 06:22:52.803'
,104
,'M12')
, ('2018-09-13 06:23:52.803'
,106
,'M12')
, ('2018-09-13 06:24:52.803'
,108
,'M12')
, ('2018-09-13 06:25:52.803'
,2
,'M77')
, ('2018-09-13 06:29:14.803'
,4
,'M77')
, ('2018-09-13 06:29:16.803'
,6
,'M77')
, ('2018-09-13 06:29:18.803'
,8
,'M77')
, ('2018-09-13 06:29:45.803'
,10
,'M77')
, ('2018-09-13 06:29:55.803'
,12
,'M77')
, ('2018-09-13 06:30:18.803'
,14
,'M77')
, ('2018-09-13 06:31:18.803'
,26
,'M77')
;WITH RESULT AS (
SELECT
TT.code
, MaxValueThatday = max(maxval.MAXVALUE )
, MaxValueBefore630NextDay = max(MAXValBefore630.MAXVALUE)
, ResultSubstraction =
CASE WHEN max(maxval.MAXVALUE ) <> max(MAXValBefore630.MAXVALUE)
THEN max(maxval.MAXVALUE ) - max(MAXValBefore630.MAXVALUE)
ELSE max(maxval.MAXVALUE )
END
FROM [dbo].[TestTable] TT
OUTER APPLY(
SELECT max(VALUE) MAXVALUE
, code
FROM [dbo].[TestTable] aa
WHERE Aa.code = tt.code
group by code
)maxval
OUTER APPLY(
SELECT max(A.VALUE) MAXVALUE
, code
FROM [dbo].[TestTable] A
WHERE DATEPART(HOUR,[DATE]) <= 6 AND DATEPART(MINUTE,[DATE]) < 30
and A.code = tt.code
group by code
)MAXValBefore630
where ( [DATE] > DATEADD(MINUTE,390,CAST({ fn CURDATE()} AS DATETIME) ) ) --6:30 today
group by tt.code
)
SELECT SUM(ResultSubstraction)
FROM RESULT
推荐阅读
- typescript - 打字稿参数未对齐 (align)tslint(1)
- php - 如何配置 nginx 仅将 URL 中的第一个路径映射到 php 应用程序的特定目录?
- javascript - 在 Javascript(Angular)中调用异步函数的最佳方法是延迟/睡眠。Setimeout 不允许这样做
- kotlin - 类型或类键控映射
- css - 为什么我们需要显示块来使按钮居中
- css - 根据页面滚动固定 div
- pine-script - 如何在 pine 脚本中使用杠杆
- regex - Spark - 使用正则表达式从字母数字字符串中提取数值
- java - 无法执行java程序
- c++ - 函数超出范围后被清除的 C++ 对象数据