2013-06-22 144 views
1

我有一个表ORDERS,有一个字段DATE_ADD,日期格式为2010-02-28 20:48:09。我需要找出没有订单的日期。我试过SQL:查找日期无记录

SELECT * FROM `orders` HAVING COUNT(date_add) < 1 

但它返回0结果虽然必须有一些。在这个查询中我在哪里错了?

+0

'HAVING'是'GROUP BY'的合作伙伴。尝试一起使用它们 – Raptor

+0

你有多少场?..我的意思是列? – Ahmed

回答

1

试试这个:

SELECT DATE(date_add), COUNT(date_add) AS cnt FROM `orders` GROUP BY DATE(date_add) HAVING COUNT(date_add) < 1 
0

您无法查询orders表中的数据,它包含。或者,为了不同,您需要一个包含所有可用日期的表格。如果你有一个日历表,那么你做这样的查询为:

select c.* 
from calendar c left outer join 
    (select distinct cast(date_add as date) as date_add 
     from orders 
    ) o 
    on c.date = o.date_add 
where o.date_add is null 

注意:您需要date_add转换为日期(删除时间部分)。这因数据库而异。以上是SQL Server语法。它也可能是date(date_add)(MySQL)或trunc(date_add)(Oracle)或其他东西。

如果您没有日历表,那么创建一个非常适合数据库。如果几乎所有日期都有订单,您可以这样做:

select driver.dte 
from (select dte 
     from (select distinct cast(date_added + n.n as date) as dte 
      from orders 
      ) o cross join 
      (select 0 as n union all select 1 as n union all select 2 as n 
      ) 
    ) driver left outer join 
    (select distinct cast(date_add as date) as date_add 
     from orders 
    ) o 
    on driver.dte = o.date_add 
where o.date_add is null