最小和最大日期的列值

时间:2016-10-19 08:06:33

标签: sql-server tsql

我有以下数据(SQL server 2014):

select [Event], 
   min([Start ]) [Start ], 
   max([End ]) [End ], 
   avg([Pres_Avg]) [Pres_Avg],
   Min([Pres_Min]) [Pres_Min],
   Max([Pres_Max]) [Pres_Max]
from y
group by [Event], g

我使用以下查询来获得Pres_Avg的平均值以及Pres_Min和Pres_Max的最小值和最大值:

          Event        Start             End    Pres_Avg    Pres_Min    Pres_Max    Pres_Start  Pres_End 
 11-PSV-401002A 4-4-16 12:51    4-4-16 15:09    6.092661    6.05642176  6.13351011  6.07731962  6.05952168

我想得到Pres_Start,其中Pres_Start为min([Start])= 6.07731962,Pres_End为Pres_End为max([End])= 6.05952168。 如何在同一个查询中创建它?

select [Event], 
   min([Start ]) [Start ], 
   max([End ]) [End ], 
   avg([Pres_Avg]) [Pres_Avg],
   Min([Pres_Min]) [Pres_Min],
   Max([Pres_Max]) [Pres_Max],
   min([Start ]) and Pres_Start value, 
   max([End ]) and Pres_End value
from y
group by [Event], g

我想在一个查询中找到类似下面的代码,因为我已经获得了分钟和开始日期:

$.each(re, function(i, val) {
    alert(val.id + "=" + val.gdate);
});

感谢

1 个答案:

答案 0 :(得分:1)

您需要再次使用表格y再次加入,以检索具有所需开始值和结束值的行。您可以通过将查询放入子查询,然后与y连接两次来完成此操作:

select y_grouped.*
    , y_start.Pres_Start 
    , y_end.Pre_End
from ( select [Event], 
           min([Start ]) [Start ], 
           max([End ]) [End ], 
           avg([Pres_Avg]) [Pres_Avg],
           Min([Pres_Min]) [Pres_Min],
           Max([Pres_Max]) [Pres_Max]
       from y
       group by [Event], g ) y_grouped
inner join y y_start on y_grouped.[Start ] = y_start.[Start ]
inner join y y_end on y_grouped.[End ] = y_end.[End ]

如果没有样本数据来运行它,很难完全确定它会工作,但是试一试,让我们知道结果如何!

另请注意,如果您有多个行具有相同的开始日期或相同的结束日期,则可以在此查询中获得多行。如果是这种情况,那么请指定如何在这两行之间进行选择以获得Pres_Start和Pres_End值。

对于单行方法,您可以执行以下操作:

select [Event], 
   min([Start ]) [Start ], 
   max([End ]) [End ], 
   avg([Pres_Avg]) [Pres_Avg],
   Min([Pres_Min]) [Pres_Min],
   Max([Pres_Max]) [Pres_Max],
   (select top 1 Pres_Start from @y y2 where y1.[Event] = y2.event and y1.g = y2.g order by [Start ] asc) Pres_Start,
   (select top 1 Pres_End from @y y2 where y1.[Event] = y2.event and y1.g = y2.g order by [End ] desc) Pres_End
from @y as y1
group by [Event], g