Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于实时数据库查询的每个完整月份的减法_Sql_Sql Server_Partition - Fatal编程技术网

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

Sql 用于实时数据库查询的每个完整月份的减法,sql,sql-server,partition,Sql,Sql Server,Partition,我有一个问题,有点不同 关于这些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), lastR

我有一个问题,有点不同

关于这些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)
这是有问题的,因为2017-04-06 01:57:47.4740000的值可能与2017-04-01 00:00:00.0000000的值不同,并且输出结果为假

所以基本上,我需要接受相同的查询,但是在一个月的第一个时刻和最后一个时刻应用它

有什么想法吗

编辑 我必须为每个月选择第一个时刻和最后一个时刻,有了这些,我需要查询我的数据库以获得相应的值并减去它

因此,我想要的是获得以下价值:

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
...
historian数据库也可以检索me值,因此不必担心每月第一个和最后一个时刻的数据

使用这些值,我需要减去它并检索它,因此这可能是:

Year | Month | Value
2017 | 03    | 12
2017 | 04    | 54
...
这很难解释清楚,但是我试图查询的数据库使用SQL作为接口来读取数据。事实上,真实的数据库是以时间为基础的,所以我会将每个对象的值存储在其中,他会得到值。所以我可以随时查询,数据库将能够检索到我的东西

以下是一个输出示例:


我无法检索到关于表设计的任何其他信息。我只知道标记名条件是强制性的。

说真的,你可能需要在谷歌上搜索一下,例如“sql server月初”?你已经用
first\u value
来计算第一个/最后一个值了,你还想要什么。@dnoeth,他希望我们写一个查询,返回2012年1月1日的SQL Server和更新版本的函数。我真的不喜欢这种问题。让我们阅读不相关的代码,让我们阅读其他问题,但未能提供相关数据。一个好的sql查询应该包含对问题的清晰解释、ddl+dml的示例数据、期望的结果以及您当前的最佳尝试。除了噪音以外的任何东西。
Year | Month | Value
2017 | 03    | 12
2017 | 04    | 54
...