SQL从两个时间段中选择最大值
我有一个查询,我试图从夏季(这里是11月-4月)中选择最大值,但它只给我这个查询中11月-12月的值。你知道为什么吗SQL从两个时间段中选择最大值,sql,sql-server,Sql,Sql Server,我有一个查询,我试图从夏季(这里是11月-4月)中选择最大值,但它只给我这个查询中11月-12月的值。你知道为什么吗 SELECT TOP 10 Value, DateTime FROM history WHERE Tagname = @Tag AND ((DateTime >= @StartYear AND DateTime < @StartWinter) OR (DateTime >= @FinishWinter AND
SELECT TOP 10 Value, DateTime
FROM history
WHERE Tagname = @Tag
AND
((DateTime >= @StartYear AND DateTime < @StartWinter)
OR
(DateTime >= @FinishWinter AND DateTime < @FinishYear))
ORDER BY Value DESC
选择前10个值,日期时间
来自历史
其中Tagname=@Tag
及
((DateTime>=@StartYear和DateTime<@startwitter)
或
(DateTime>=@FinishWinter和DateTime<@FinishYear))
按值排序描述
(DateTime>=startYear和DateTime如果@startwitter对年份不敏感,那么您可能也会在2010年1月至4月收到订单。在使用“前10名”时,您不应该使用“订购人”吗 你住在什么地方,或者换个说法:什么是合理的日期(@StartYear、@startwitter、@FinishWinter、@FinishYear) 在欧洲,我预计:
- StartYear=2010-01-01
- 完成年份=2010年12月31日
- 星际之星=2010-12-20(约)
- FinishWinter=2010-03-20(大约)
因此,这将包括全年,以及大部分时间,从03.20倍到12.20倍 嘿,谢谢大家的帮助,这似乎是我们的historian(来自sql server的链接数据库)的问题,所以我会向他们提出这个问题。我在一个常规的mssql数据库上尝试了这个查询,结果看起来很好…@HamishC:欢迎使用SO:-)您可以突出显示您的代码,然后按ctrl-k将其格式化。另外,我使用SQL Server进行标记,因为我认为我可以识别它的语法。如果我错了,请重新标记。谢谢。干杯,我应该补充一下@StartYear variables etc只是2009年1月、5月、11月和2010年1月的日期参数值是多少?值的数据类型是什么?您可以在这里删除表的DDL吗?@Tag只是一个标识符,例如“P40红色”Amps(nvarchar256),Value是整数,startyear是“20090101 00:00:00”(Datetime值),其他日期如上所述。不确定这里是否有足够的DDL空间,该表非常庞大(我们的数据历史记录的一部分),sql绝对正确。你能提供一些代码,你在哪里构造这个sql(包括传递的参数)?我已经检查了数据,我应该从这两个阶段得到结果。如果我交换这两个子句,我只会得到1-4月的数据。就好像这一行被完全忽略了……例如,如果你在选择的两个时段中有一堆相同的高值,那么你很可能会得到你看到的结果。比如说,1000是表中的最高值,有20个值为1000的结果,1-4月有10个,11-12月有10个。您可以有效地获得这十个结果中的任意十个作为结果,返回哪十个结果将取决于您如何构造查询。如果使用
orderbyvalue DESC,DateTime
,查看是否返回相同的结果集。这可能会给你一个线索。不,也不是这样,我一直在使用两个独立的查询来获取数据,而且通常值都是唯一的(通过变电站断路器的峰值电流)。我只是好奇为什么这不起作用。呃,结尾有一个“按价值描述的订单”。上面也提到了日期,我在新西兰,所以2009年1月1日,5月1日,11月1日,2010年1月1日。