テーブルORDERS
があり、フィールドがありDATE_ADD
、日付形式は2010-02-28 20:48:09
です。注文がなかった日付を調べる必要があります。私は試した
SELECT * FROM `orders` HAVING COUNT(date_add) < 1
しかし、いくつかあるはずですが、0の結果を返します。このクエリのどこが間違っていますか?
これを試して:
SELECT DATE(date_add), COUNT(date_add) AS cnt FROM `orders` GROUP BY DATE(date_add) HAVING COUNT(date_add) < 1
テーブルに含まれていない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