SQL从两个时间段中选择最大值

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

我有一个查询,我试图从夏季(这里是11月-4月)中选择最大值,但它只给我这个查询中11月-12月的值。你知道为什么吗

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和DateTimefinishwinter和Datetime 因此,您将从2009年1-2-3-11-12月选择前10名。如果您希望从中选择,并且您仅在2009年11月至12月获得值,请检查其他月份是否应该有值


如果@startwitter对年份不敏感,那么您可能也会在2010年1月至4月收到订单。

在使用“前10名”时,您不应该使用“订购人”吗

你住在什么地方,或者换个说法:什么是合理的日期(@StartYear、@startwitter、@FinishWinter、@FinishYear)

在欧洲,我预计:

  • StartYear=2010-01-01
  • 完成年份=2010年12月31日
  • 星际之星=2010-12-20(约)
  • FinishWinter=2010-03-20(大约)
因此,第一阶段将从2010年1月1日到2010年12月20日(大约),第二阶段从2010年3月到年底


因此,这将包括全年,以及大部分时间,从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日。