我有一个问题,有点不同Apply a substracton for each month
关于这些SQL:
;WITH cte AS
(
SELECT DISTINCT
Annees = YEAR(DateTime),
Mois = MONTH(DateTime),
firstRecord = first_value(value) OVER (PARTITION BY YEAR(DateTime), MONTH(DateTime) ORDER BY DateTime ASC),
lastRecord = first_value(value) OVER (PARTITION BY YEAR(DateTime), MONTH(DateTime) ORDER BY DateTime DESC)
FROM
AnalogHistory
WHERE
TagName = 'A_000000000000000000000000000058.PV_Kw'
AND DateTime >= '01/01/2016 00:00:00'
AND DateTime <= '24/07/2017 13:53:31'
)
SELECT
Annees, Mois,
value = isnull(lastRecord, 0) - isnull(firstRecord, 0)
FROM
cte
SELECT
YEAR(DateTime) AS Annee, MONTH(DateTime) AS Mois,
MIN(Value) As MinVal, MAX(Value) As MaxVal,
MAX(Value) - MIN(Value) As Difference
FROM
AnalogHistory
WHERE
TagName = 'A_000000000000000000000000000058.PV_Kw' AND
DateTime >= '01/01/2016 00:00:00' AND
DateTime <= '24/07/2017 13:53:31'
GROUP BY
YEAR(DateTime), MONTH(DateTime)
ORDER BY
YEAR(DateTime), MONTH(DateTime)
它们对我所要求的一切都有好处。但就目前而言,它有点不同。
正如我所说,我有一个历史数据库,这种查询将返回100行,间隔相同的间隔,因此对于查询,我会得到:
2017-03-31 07:39:04.1310000
2017-04-06 01:57:47.4740000
2017-04-11 20:16:30.8180000
...
这是有问题的,因为2017-04-06 01:57:47.4740000的值可能与2017-04-01 00:00:00.0000000的值不同,结果输出为false。
所以基本上,我需要采取相同的查询,但是在一个月的最初时刻和一个月的最后一刻应用它。
有什么想法吗?
我必须为每个月选择第一个时刻和最后一个时刻,并且使用这些,我需要查询我的数据库以获取相应的值并减去它。
所以我想要的是获得价值:
2017-03-01 00:00:00.0000000 | 12
2017-03-31 23:59:59.9999999 | 24
2017-04-01 00:00:00.0000000 | 24
2017-04-30 23:59:59.9999999 | 78
...
而不是:
2017-03-31 07:39:04.1310000 | 23
2017-04-06 01:57:47.4740000 | 38
2017-04-11 20:16:30.8180000 | 42
...
历史数据库也能够检索我的价值,因此不必担心每个月的第一个和最后一个时刻有数据
使用这些值,我需要将其减去并检索它,因此可能是:
Year | Month | Value
2017 | 03 | 12
2017 | 04 | 54
...
很难解释,但我正在尝试查询的数据库是使用SQL作为读取数据的接口。事实上,真正的数据库在时间基础上,所以我将存储一个对象的每个值,他将获得价值。所以我可以随时查询,数据库将能够找回一些东西。
以下是输出的例子:
我无法检索有关表格设计的任何其他内容。我所知道的是TagName条件是强制性的。