SQL多日期查询

SQL多日期查询,sql,Sql,我正在处理一个查询,其中我必须找到一个零件上的3个或更多订单,该零件将有多个日期范围。我遇到的问题是,查询看起来并不是专门查看日期范围……而是查看完整的日期范围 SELECT partnumber, count(orders.partorderid) as numberoforders FROM orders WHERE(orderdate between '2013-10-07' and '2013-10-13') or (orderdate between '2013-10-14'

我正在处理一个查询,其中我必须找到一个零件上的3个或更多订单,该零件将有多个日期范围。我遇到的问题是,查询看起来并不是专门查看日期范围……而是查看完整的日期范围

 SELECT partnumber, count(orders.partorderid) as numberoforders 
 FROM orders
 WHERE(orderdate between '2013-10-07' and '2013-10-13') or (orderdate between '2013-10-14' and '2013-10-20')
 GROUP BY partnumber
 HAVING COUNT(partorderid) > 2  
查询返回10/07-10/20之间的numberoforders,而不是10/07-10/13和10/14-10/20之间的numberoforders???

尝试以下操作:

SELECT partnumber,
    SUM(CASE WHEN orderdate BETWEEN '2013-10-07' and '2013-10-13' THEN 1 END) week1,
    SUM(CASE WHEN orderdate BETWEEN '2013-10-14' and '2013-10-20' THEN 1 END) week2
FROM orders
GROUP BY partnumber
HAVING SUM(CASE WHEN orderdate BETWEEN '2013-10-07' and '2013-10-13' THEN 1 END) > 2
    AND SUM(CASE WHEN orderdate BETWEEN '2013-10-14' and '2013-10-20' THEN 1 END) > 2
或者您可能更喜欢:

SELECT *
FROM (
    SELECT partnumber,
        SUM(CASE WHEN orderdate BETWEEN '2013-10-07' and '2013-10-13' THEN 1 END) week1,
        SUM(CASE WHEN orderdate BETWEEN '2013-10-14' and '2013-10-20' THEN 1 END) week2
    FROM orders
    GROUP BY partnumber
) t WHERE week1 > 2 AND week2 > 2
重复次数较少


仅供参考,如果
orderdate
是一个日期,您就可以了。但是如果它有日期a和非零时间,您将丢失2013-10-13 00:00:00之后和2013-10-14 00:00:00之前的订单。

感谢您的快速回复!我唯一的问题是,如果满足其中一个条件,它会在第一周或第二周显示空白或<3。这些值可以从结果中消除吗?这取决于你所说的消除是什么意思。是否要将有问题的列中的值设为NULL,或者删除零件号的整个记录?从查询结果中删除零件号的记录。很简单…只需将
WHERE week1>2或week2>2
更改为
WHERE week1>2和week2>2
由于WHERE附近的语法错误,我无法运行第二个示例。我将第一个示例中HAVING子句中的OR改为AND,输出非常好,但现在缺少值。一些大于3的订单不起作用。