实时数据库查询每个完整月份的减法

时间:2017-07-25 07:09:12

标签: sql sql-server partition

我有一个问题,有点不同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作为读取数据的接口。事实上,真正的数据库在时间基础上,所以我将存储一个对象的每个值,他将获得价值。所以我可以随时查询,数据库将能够找回一些东西。

以下是输出的例子:

Database query example

我无法检索有关表格设计的任何其他内容。我所知道的是TagName条件是强制性的。

0 个答案:

没有答案