Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Sql Server 2005 - Fatal编程技术网

Sql 找出一天中的最小流量及其发生的时间

Sql 找出一天中的最小流量及其发生的时间,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,使用MSQL2005 我有一组连续的流量测量值(每个15分钟时间段的平均值) 我正在尝试编写一个查询,以查找每天的最小流量及其发生的时间 找到最小流量很容易,但获得时间却很难 目前我这样做: select d1.data_point_groupid , min(d1.timeID) [timeId] , min(d1.[value]) [value] from dma.dbo.calculated_average_group_flow d1 where night=1 an

使用MSQL2005

我有一组连续的流量测量值(每个15分钟时间段的平均值)

我正在尝试编写一个查询,以查找每天的最小流量及其发生的时间 找到最小流量很容易,但获得时间却很难

目前我这样做:

select d1.data_point_groupid
     , min(d1.timeID) [timeId]
     , min(d1.[value]) [value] 
from dma.dbo.calculated_average_group_flow d1
where night=1 and round(d1.value, 6)=
(
    select round(min(value), 6)
     from dma.dbo.calculated_average_group_flow d2
     where night=1
        and d2.[date]=d1.[date]
        and d2.data_point_groupid=d1.data_point_groupid
)
group by d1.data_point_groupid, d1.date
但是,由于舍入误差,这有时会不匹配

我也尝试过使用排名,但这太慢了,我不得不取消查询

select [data_Point_GroupID], [date], [timeId], [value] from
    (
    select * , Rank() over (Partition BY data_Point_GroupID, [date] order by value ASC) as Rank
    from 
    [calculated_average_group_flow] d2
    ) d1
 WHERE rank=1
计算的平均组流量是进行平均计算的另一个视图


有更好的方法吗?

在比较浮点时,需要使用ε(我在下面使用了1e-9)来避免精度错误:

select d1.data_point_groupid
     , min(d1.timeID) [timeId]
     , min(d1.[value]) [value] 
from dma.dbo.calculated_average_group_flow d1
where night=1 and 1e-9 >=
(
    select abs(d1.value - min(d2.value))
     from dma.dbo.calculated_average_group_flow d2
     where night=1
        and d2.[date]=d1.[date]
        and d2.data_point_groupid=d1.data_point_groupid
)
group by d1.data_point_groupid, d1.date

比较浮点时,需要使用ε(我在下面使用了1e-9)来避免精度错误:

select d1.data_point_groupid
     , min(d1.timeID) [timeId]
     , min(d1.[value]) [value] 
from dma.dbo.calculated_average_group_flow d1
where night=1 and 1e-9 >=
(
    select abs(d1.value - min(d2.value))
     from dma.dbo.calculated_average_group_flow d2
     where night=1
        and d2.[date]=d1.[date]
        and d2.data_point_groupid=d1.data_point_groupid
)
group by d1.data_point_groupid, d1.date

您需要首先最小化该值,然后在外部查询中查找与该最小值相关的时间。我不知道你为什么要舍入这个值

select d.data_point_groupid, min_value, timeId 
from dma.dbo.calculated_average_group_flow d inner join
       (select data_point_groupid, min([value]) as min_value
       from dma.dbo.calculated_average_group_flow 
       where night=1 
       group by data_point_groupid) mnv on 
d.data_point_groupid = mnv.data_point_groupid and 
d.[value] = mnv.min_value
where night=1 

您需要首先最小化该值,然后在外部查询中查找与该最小值相关的时间。我不知道你为什么要舍入这个值

select d.data_point_groupid, min_value, timeId 
from dma.dbo.calculated_average_group_flow d inner join
       (select data_point_groupid, min([value]) as min_value
       from dma.dbo.calculated_average_group_flow 
       where night=1 
       group by data_point_groupid) mnv on 
d.data_point_groupid = mnv.data_point_groupid and 
d.[value] = mnv.min_value
where night=1 

请您添加一个数据示例,以及您希望从中得到什么?数据集非常大且保密。既然问题已经得到了回答,我就不做任何补充了。你能给你的数据加一个例子吗?你希望从中得到什么?数据集非常大而且保密。既然问题已经得到了回答,我不会编造任何东西。我知道我的方法有点难闻!谢谢你提醒我正确的方法。我知道我的方法有点难闻!谢谢你提醒我正确的方法。因为匹配是非常随机的,否则在比较浮点时会出现舍入错误。你能减去它们并引入一个容差级别吗?或者骡子。通过100000000然后比较?是的,谢谢,这正是我所做的,请参阅dcp的响应,因为匹配是非常随机的,否则是由于比较浮点时的舍入错误。你能减去它们并引入公差级别吗?或者骡子。是的,谢谢,这正是我所做的,请参阅dcp的回复